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类似的行为。我的想法是用Timer
或Task.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);
}
}
}
只是在详细阐述拉斐尔·雷格的回答,这是我的解决方案,也处理振动之间的暂停长度。
实现识别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);