我正在尝试在我的应用程序中实现一个功能,它可以振动振动器。 用户可以使用滑块更改3个内容,即振动强度,脉冲长度和脉冲之间的时间。
我在考虑一些代码:
for(i=0; i<(pulse length * whatever)+(pulse gap * whatever); i+=1){
pattern[i]=pulse length*i;
patern[i+1]=pulse gap;
然而,当我使用这段代码时(当它正确完成时,这只是一个简单的例子)它会崩溃应用程序。此外,当我改变振动强度(确实有效)时,我必须重新启动服务以改变力量。我改变力量的方法是改变振动器打开的时间,并以一种模式关闭。
这是我用来检测手机应该如何振动的代码(这里的代码与我喜欢的代码有点不同):
if (rb == 3){
z.vibrate(constant, 0);
} else if (rb == 2){
smooth[0]=0;
for (int i=1; i<100; i+=2){
double angle = (2.0 * Math.PI * i) / 100;
smooth[i] = (long) (Math.sin(angle)*127);
smooth[i+1]=10;
}
z.vibrate(smooth, 0);
} else if (rb == 1){
sharp[0]=0;
for(int i=0; i<10; i+=2){
sharp[i] = s*pl;
sharp[i+1] = s+pg;
}
z.vibrate(sharp, 0);
}
} else {
z.cancel();
}
如果有人能够指出我可以做到这一点的某些代码的方向,或者我如何使它工作,我会非常感激。
答案 0 :(得分:0)
我唯一的猜测是你收到 ArrayIndexOutOfBounds 错误。
如果是这样,您需要在尝试填充之前定义long
数组的长度。
long[] OutOfBounds = new long[];
OutOfBounds[0] = 100;
// this is an error, it's trying to access something that does not exist.
long[] legit = new long[3];
legit[0] = 0;
legit[1] = 500;
legit[2] = 1000;
// legit[3] = 0; Again, this will give you an error.
vibrate()
是一个聪明的功能。这些示例都没有引发错误:
v.vibrate(legit, 0);
// vibrate() combines both legit[0] + legit[2] for the 'off' time
long tooLegit = new long[100];
tooLegit[0] = 1000;
tooLegit[1] = 500;
tooLegit[10] = 100;
tooLegit[11] = 2000;
v.vibrate(tooLegit, 0);
// vibrate() skips over the values you didn't define, ie long[2] = 0, long[3] = 0, etc
希望有所帮助。