2
我有无尽的振动的服务后重复震动,但是当屏幕关闭振动停止。在添加了正确的BroadcastReceiver后,我注意到无论是在屏幕开启还是关闭之后,我都无法播放重复振动。下面的实施例简单的代码:无法启动SCREEN_ON意图
//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(未重复)振动工作,但是当设定为其他值不起作用。
任何想法,解决方法?或者,也许它只适用于其他手机?我拼命地跑它放在谷歌Nexus和Android的4.1.2
编辑:
一些测试后,我已经确定:如果他们之前的屏幕去了被拦
- 震动会正常启动(但不中的onReceive - 这似乎为时已晚)
- “系统振动”(例如解锁屏幕)时,允许振动与下一屏幕开/关正常启动。直到下一个“破发”,等等
- (EDIT 2) - 这绝对是连接模式 - 不存在具有振动(long millis)来没有这样的问题 - 一切工作正常
如果我没有找到任何“正常”的解决方案,我将只需要创建可能是我自己的振动器类...
有可能是你的mVibrator是从服务的上下文中获取上不转播工作。尝试在再次的onReceive获取它(从上下文的背景下) – njzk2
@ njzk2 - 我检查了,但它似乎并不如此。它有一些震动停止在“模式”,似乎我不能正确地重新启动它们,只有“系统振动”可以。请参阅我的编辑 – Koger