Флаттер: вибрировать на устройстве в течение нестандартного промежутка времени - PullRequest
0 голосов
/ 10 июня 2018

Я пытаюсь создать приложение Flutter для Android, которое будет вибрировать телефон одновременно

  • достаточно долго и достаточно сильно, чтобы даже когда телефон пользователя был в кармане, вибрация была заметной
  • по определенному шаблону, который пользователь может идентифицировать (например, по азбуке Морзе)

Я нашел способы создания тактильной обратной связи, например HapticFeedback.vibrate, HapticFeedback.lightImpact;однако ни один из них не позволяет мне контролировать длительность вибрации.

Есть ли способ заставить телефон вибрировать в течение определенного промежутка времени (например, 250 мс)?

Ответы [ 2 ]

0 голосов
/ 11 июня 2018

Я отвечаю на свой вопрос, поскольку нашел решение, которое хорошо работает для Android;используя плагин vibrate, следующий код прекрасно работает для отправки пользовательских длин вибрации и моделей вибрации:

class GoodVibrations {
  static const MethodChannel _channel = const MethodChannel(
      'github.com/clovisnicolas/flutter_vibrate');

  ///Vibrate for ms milliseconds
  static Future vibrate(ms) =>
      _channel.invokeMethod("vibrate", {"duration": ms});

  ///Take in an Iterable<int> of the form
  ///[l_1, p_1, l_2, p_2, ..., l_n]
  ///then vibrate for l_1 ms,
  ///pause for p_1 ms,
  ///vibrate for l_2 ms,
  ///...
  ///and vibrate for l_n ms.
  static Future vibrateWithPauses(Iterable<int> periods) async {
    bool isVibration = true;
    for (int d in periods) {
      if (isVibration && d > 0) {
        vibrate(d);
      }
      await new Future.delayed(Duration(milliseconds: d));
      isVibration = !isVibration;
    }
  }
}
0 голосов
/ 10 июня 2018

Вот один плагин, который может сделать работу.https://pub.dartlang.org/packages/vibrate

Пример из пакета:

// Check if the device can vibrate
bool canVibrate = await Vibrate.canVibrate;

Для iOS:

// Vibrate
// Vibration duration is a constant 500ms because 
// it cannot be set to a specific duration on iOS.
Vibrate.vibrate()

для Android

// Vibrate with pauses between each vibration
final Iterable<Duration> pauses = [
    const Duration(milliseconds: 500),
    const Duration(milliseconds: 1000),
    const Duration(milliseconds: 500),
];
// vibrate - sleep 0.5s - vibrate - sleep 1s - vibrate - sleep 0.5s - vibrate
Vibrate.vibrate(pauses);

Обратите внимание, что естьтолько кастомная вибрация для андроида

...