Виброзвонок

Виброзвонок

Как правило, практически все современные модели мобильных телефонов и смартфонов поддерживают функцию виброзвонка. Следовательно, должны существовать функции для его включения и выключения. Для использования виброзвонка на смартфоне применяются функции Vibrate, VibrateStop и VibrateGetDeviceCaps.

При помощи этих функций разработчик может использовать возможности виброзвонка в своих приложениях. Соответствующий код приведен в листинге 13.23.

Листинг 13.23

/// <summary>

/// Включает виброзвонок

/// </summary>

/// <returns>S_OK сообщает об успешном вызове функции. В случае

/// ошибки возвращается E_FAIL

///</returns>

[DllImport("aygshell")]

private static extern int Vibrate(int cvn, IntPtr rgvn, uint fRepeat,

 uint dwTimeout);

/// <summary>

/// Останавливает виброзвонок

/// </summary>

/// <returns>S_OK сообщает об остановке виброзвонка. В случае

/// ошибки возвращается EFAIL

/// </returns>

[DllImport("aygshell")]

private static extern int VibrateStop();

/// <summary>

/// Получает сведения о возможности использования виброзвонка

/// </summary>

/// <param name="caps">Перечисление VIBRATEDEVICECAPS,

/// определяющее возможности воспроизведения виброзвонка

/// устройством.

///</param>

[DllImport("aygshell")]

private static extern int VibrateGetDeviceCaps(VibrationCapabilities caps);

/// <summary>

/// Используется функцией VibrateGetDeviceCaps для определения

/// возможности воспроизведения виброзвонка.

/// </summary>

public enum VibrationCapabilities : int {

 VDC_Amplitude,

 VDC_Frequency,

}

private void mnuStopVibrate_Click(object sender, EventArgs e) {

 StopVibrate();

}

private void mnuVibrate_Click(object sender, EventArgs e) {

 StartVibrate();

}

/// <summary>

/// Включаем виброзвонок

/// </summary>

/// <returns>В успешном случае возвращается TRUE, в случае

/// ошибки - FALSE.</returns>

public static bool StartVibrate() {

 int result = Vibrate(0, IntPtr.Zero, 0xffffffff, 0xffffffff);

 if (result != 0) {

  return false;

 }

 return true;

}

/// <summary>

/// Останавливаем виброзвонок

/// </summary>

/// <returns>В успешном случае возвращается TRUE, в случае

/// ошибки - FALSE.</returns>

public static bool StopVibrate() {

 int result = VibrateStop();

 if (result != 0) {

  return false;

 }

 return true;

}

ВНИМАНИЕ

Приведенный код будет работать только на смартфонах. На форумах можно найти сообщения, что на устройствах под управлением PocketPC Phone Edition этот пример не работает, даже если указанное устройство поддерживает виброзвонок.