颤动:在设备上振动非标准时间长度

时间:2018-06-10 16:11:32

标签: android flutter android-vibration vibration haptic-feedback

我正在尝试为Android制作一个Flutter应用程序来振动手机

  • 足够长且足够有力,即使用户的手机放在口袋里,振动也很明显
  • 以用户可识别的特定模式(如摩尔斯电码)

我找到了产生触觉反馈的方法,例如HapticFeedback.vibrateHapticFeedback.lightImpact;但是,这些都不能让我控制振动的长度。

有什么方法可以让手机振动一段指定的时间(例如250毫秒)?

2 个答案:

答案 0 :(得分:2)

我正在回答我自己的问题,因为我找到了一个适用于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;
    }
  }
}

答案 1 :(得分:0)

这是一个可以完成工作的插件。 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()

for 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);

请注意,Android只有自定义振动