我有一个振动无穷无尽的服务,但是当屏幕关闭时振动停止。添加正确的广播接收器后,我注意到在屏幕打开或关闭后我根本无法播放重复振动。下面的示例简单代码:
//VibratingService class
Vibrator mVibrator;
@Override
public int onStartCommand(Intent intent, int flags, int startId) {
mVibrator = (Vibrator) getSystemService(VIBRATOR_SERVICE);
IntentFilter filter = new IntentFilter(Intent.ACTION_SCREEN_ON);
filter.addAction(Intent.ACTION_SCREEN_OFF);
registerReceiver(new BroadcastReceiver() {
@Override
public void onReceive(Context context, Intent intent) {
vibrate();
}
}, filter);
vibrate();
return START_STICKY;
}
@Override
public void onDestroy() {
mVibrator.cancel();
super.onDestroy();
}
@Override
public IBinder onBind(Intent intent) {
return null;
}
private void vibrate() {
Log.d("TAG", "vibrate");
mVibrator.vibrate(new long[] { 1000, 500 }, 0); //doesn't work
//mVibrator.vibrate(new long[] { 1000, 500 }, -1); //works
}
最奇怪的是,当振动方法中的重复参数设置为 -1(不重复)时振动起作用,但设置为其他值时不起作用。
任何想法,解决方法?或者也许它只适用于其他手机?我在 Google Nexus 和 4.1.2 Android 上运行它
编辑:
经过一些测试,我确定:
- 如果它们在屏幕关闭之前停止振动将正确启动(但不是在 onReceive - 这似乎为时已晚)
- “系统振动”(例如解锁屏幕时)可让振动在下一个屏幕打开/关闭时正确启动。直到下一个“休息”,依此类推
- (edit2) - 这肯定与模式有关 - 振动(长毫秒)没有这样的问题 - 一切正常
如果我没有找到任何“正常”的解决方案,我可能只需要创建自己的 Vibrator 类......