Windows Phone 运行时 API VibrationDevice 模式

Windows Phone Runtime API VibrationDevice pattern

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

Vibrates the phone for the specified duration (from 0 to 5 seconds).

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

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

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

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

没有办法超过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);
            }
        }
    }

只是详细阐述了 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);