【问题标题】:Flutter: vibrate on device for non-standard length of timeFlutter:在设备上振动非标准时间长度
【发布时间】:2018-06-10 16:11:31
【问题描述】:

我正在尝试为 Android 构建一个颤振手机的 Flutter 应用程序

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

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

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

【问题讨论】:

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


    【解决方案1】:

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

    【讨论】:

    • 你应该接受你自己的答案。许多人在查找特定问题时只点击已接受答案的问题。
    【解决方案2】:

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

    安卓版

    // 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的自定义振动

    【讨论】:

    • 有什么办法可以让振动时间不超过500ms?
    • 根据插件,iOS 上没有。试着上网看看
    • 您可以查看 ios 10 中提供的新触觉 API。那么也许你可以结合这些振动
    • 对于android,上面的解决方案应该足够了。只是通过暂停,就是这样
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-10-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-08-15
    • 2013-06-13
    相关资源
    最近更新 更多