無限に振動するサービスを利用していますが、画面をオフにすると振動が止まります。正しい BroadcastReceiver を追加した後、画面をオンまたはオフにした後、振動を繰り返すことがまったくできないことに気付きました。以下の簡単なコードの例:
//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 クラスを作成する必要があります...