2

我已经通过了振动模式和 -1 不重复。但我想通过 10 代替 -1(现在它应该重复 10 次)然后这个模式不重复 10 次。如何做到这一点?目前我是使用此代码

Vibrator mVibrate = (Vibrator) getSystemService(Context.VIBRATOR_SERVICE);
long pattern[]={0,800,200,1200,300,2000,400,4000};
// 2nd argument is for repetition pass -1 if you do not want to repeat the Vibrate
mVibrate.vibrate(pattern,-1);

但我想做 mVibrate.vibrate(pattern,10);这行不通。

4

3 回答 3

3

按预期工作,请参阅第二个参数文档:

将索引重复为要重复的模式,如果不想重复,则为 -1。

并且由于您的模式没有索引 10 它只是被忽略

于 2013-06-20T07:36:47.200 回答
1

Vibrator API 中不可能做这样的事情。一个可能的解决方案可能是做你自己的监听器并计算它的振动频率,例如 pattern[] 是通过的。但我不知道该怎么做....也许可以使用与您的模式[] sum * 10 完全相同的计时器

于 2013-06-20T07:43:05.083 回答
1

您的问题是“如何长时间(例如 2、5、10 分钟)振动 Android 设备?” 没有人真正回答你的问题,所以我会试一试。我编写了以下代码来无限期地振动手机:

// get a handle on the device's vibrator
// should check if device has vibrator (omitted here)
Vibrator v = (Vibrator) getSystemService(Context.VIBRATOR_SERVICE);

// create our pattern for vibrations
// note that the documentation states that the pattern is as follows:
// [time_to_wait_before_start_vibrate, time_to_vibrate, time_to_wait_before_start_vibrate, time_to_vibrate, ...]

// the following pattern waits 0 seconds to start vibrating and 
// vibrates for one second
long vibratePattern[] = {0, 1000};

// the documentation states that the second parameter to the
// vibrate() method is the index of your pattern at which you
// would like to restart **AS IF IT WERE THE FIRST INDEX**

// note that these vibration patterns will index into my array,
// iterate through, and repeat until they are cancelled

// this will tell the vibrator to vibrate the device after
// waiting for vibratePattern[0] milliseconds and then
// vibrate the device for vibratePattern[1] milliseconds,
// then, since I have told the vibrate method to repeat starting
// at the 0th index, it will start over and wait vibratePattern[0] ms
// and then vibrate for vibratePattern[1] ms, and start over. It will
// continue doing this until Vibrate#cancel is called on your vibrator.
v.vibrate(pattern, 0); 

如果您想振动设备 2、5 或 10 分钟,您可以使用以下代码:

// 2 minutes
v.vibrate(2 * 60 * 1000);

// 5 minutes
v.vibrate(5 * 60 * 1000);

// 10 minutes
v.vibrate(10 * 60 * 1000);

最后,如果您只想编写一种方法来执行此操作(如您所愿),您可以编写以下内容:

public void vibrateForNMinutes(Vibrator v, int numMinutesToVibrate) {
    // variable constants explicitly set for clarity
    // milliseconds per second
    long millisPerSecond = 1000;

    // seconds per minute
    long secondsPerMinute = 60;

    v.vibrate(numMinutesToVibrate * secondsPerMinute * millisPerSecond);
}
于 2015-10-06T18:04:19.693 回答