私はラジオの目覚まし時計を意図どおりに動作させるのに苦労しましたが、私はそのトピックについて多くのスレッドを読んでいますが、unfortunatleyは私を助けませんでした。setAlarmClock()はドーズモードで遅すぎます
AlarmManager am = (AlarmManager) getSystemService(ALARM_SERVICE);
Intent intent = new Intent(this, AlarmReceiver.class);
PendingIntent penInt = PendingIntent.getBroadcast(this, intentId, intent, 0);
私はstackoverflowの上、こちらをご覧APIレベル間の区別のこの方法と関係なく、デバイス上で使用されているものをAPI正しくアラームを設定しないように私のcalcNextAlarm()
機能(プラスデバッグのためのいくつかのログメッセージ)の中に置きます:
// problems in doze mode api 23+
if (Build.VERSION.SDK_INT >= 23) {
if (testMode) Log.d("Ben", "setAlarmClock() - API 23+");
am.setAlarmClock(new AlarmManager.AlarmClockInfo(alarmTimeInMillis, penInt), penInt);
}
else if (Build.VERSION.SDK_INT >= 19) {
// Wakes up the device in Idle Mode
if (testMode) Log.d("Ben", "setExact() - API >= 19 && API < 23");
am.setExact(AlarmManager.RTC_WAKEUP, alarmTimeInMillis, penInt);
}
// Old APIs
else {
if (testMode) Log.d("Ben", "set() - API < 19");
am.set(AlarmManager.RTC_WAKEUP, alarmTimeInMillis, penInt);
}
私はそれを見ることができますLog.dメッセージによると、私のAndroid 7.1デバイスでの第一の方法setAlarmClock()
は、受信側でアラームを設定するために実行されています。
私は失敗したテストの3週間後に本当に必死とコーディングしています - 居眠りモードのトレーニングページによると、この現象が発生することはありません - 今日は4分手遅れ再び降りた私のアラームを:設定
アラームをsetAlarmClock()が正常に発火し続ける - システムはDozeを終了し、それらのアラームが発生する直前に終了します。
私の7.1電話では、アラームを「今すぐ+5または6分」に設定すると、アラームが20秒から1:40分遅れることさえあります。誰も本当にいつも完全に時間外にアラームを出す方法を私にアドバイスできますか?
これは、setAlarmClockメソッドのような潜在的な通知もユーザーに表示しません。今ではそれは絶対に正確ではありませんが、私の経験によれば、5〜10秒ほどで比較的正確です。最後に、必要なときに優先順位の高いFCMメッセージをデバイスに当てるという方法がありますが、これはネットワーク接続に依存します。 – Kushan
私は前にそれを試したと確信していますが、私はとても必死で、私はそれにショットを与えます:) 1:それはbatterayで正確であり、請求されていませんか? 2:dozeトレーニングページに従う: '注意:setAndAllowWhileIdle()もsetExactAndAllowWhileIdle()も、1回につき2回以上のアラームを発生させることはできません 5分間スヌーズしたい場合は、** setExactAndAllowWhileIdle()**の代わりに通常の** setAlarmClock()**を使用してスヌーズする必要がありますか? 3:ターゲットAPI 27と最小SDKは16です。 – Ben
これで試してみてください。私が指定した2つと既に使用しているものは、とにかくドーズモードを扱う唯一のものです。アイドル状態が私のために最も効果的なときに許可しますいくつかのデバイスでそれをテストしました。いつもうまく動作します – Kushan