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 实现类似的行为。我的概念是使用 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);
}
}
}
只是详细阐述了 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);
在 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 实现类似的行为。我的概念是使用 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);
}
}
}
只是详细阐述了 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);