Windows Phone运行时API VibrationDevice模式

本文关键字:VibrationDevice 模式 API 运行时 Phone Windows | 更新日期: 2023-09-27 18:05:37

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

在指定的时间内(0 ~ 5秒)震动手机。

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

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

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

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

Windows Phone运行时API VibrationDevice模式

不可能超过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);
            }
        }
    }

只是在详细阐述拉斐尔·雷格的回答,这是我的解决方案,也处理振动之间的暂停长度。

实现识别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);