【问题标题】:Windows Phone Runtime API VibrationDevice patternWindows Phone 运行时 API VibrationDevice 模式
【发布时间】:2015-10-22 17:58:09
【问题描述】:

VibrationDevice MSDN 页面上有一条关于TimeSpan 限制的信息:

让手机振动指定的持续时间(0 到 5 秒)。

有没有办法克服这个限制,即让设备振动超过 5 秒?

此外,在 android 设备上进行开发时还有一项功能,可让您提供手机振动的模式。

public void vibrate (long[] pattern, int repeat)

我想用 Windows Phone 运行时 API 实现类似的行为。我的概念是使用TimerTask.Delay。这是一个好主意吗?有更好的方法吗?

【问题讨论】:

    标签: c# timer windows-phone-8.1 scheduled-tasks vibration


    【解决方案1】:

    没有办法超过 5 秒的限制。如果你想使用某种模式,你需要自己实现。 但请确保,如果您使用Task.Delay,则执行此实现async,这样您的应用程序就不会冻结。 也许尝试这样的事情:

    public async void Vibrate(long[] pattern, int repeat)
        {
            var vd = VibrationDevice.GetDefault();
            for (int i = 0; i < repeat; i++)
            {
                foreach (var x in pattern)
                {
                    vd.Vibrate(new TimeSpan(x));
                    await Task.Delay(100);
                }
            }
        }
    

    【讨论】:

      【解决方案2】:

      只是详细说明 Rafael Regh 的回答,这是我的解决方案,它还处理振动之间的停顿长度。

      该实现认识到 vd.Vibrate() 只是开始振动并且不会停止代码步进.. 所以 Task.Delay() 还必须考虑振动长度以实现其在振动之间实际设置暂停的目的!

      public static async Task PatternVibrate(
          long[] millisecPattern,
          long millisecPause,
          int repetitions)
          {
              var vd = VibrationDevice.GetDefault();
              for (int i = 0; i < repetitions; i++)
              {
                  foreach (var millisec in millisecPattern)
                  {
                      Debug.WriteLine(String.Format("Vibrating {0} millisec..", millisec));
                      vd.Vibrate(TimeSpan.FromMilliseconds(millisec));
                      await Task.Delay((int)millisec + (int)millisecPause);
                  }
              }
          }
      

      可以这样使用:

      await PatternVibrate(new long[] {500, 500, 1000 }, 100, 1);
      

      【讨论】:

        猜你喜欢
        • 2023-03-25
        • 1970-01-01
        • 1970-01-01
        • 2013-01-22
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多