周りに同様の質問があることは知っていますが、どれも私を助けてくれませんでした...ブロードキャストレシーバーを起動するために繰り返しアラームを設定しようとしています。居眠りモードでアラームを延期することは知っていますが、気にしません。最初はアラームが正常に機能しますが、しばらくするとアラームがまったく配信されなくなります。これは私がアラームを設定する方法です:
public static void startRepeated(Context context){
Intent intent=new Intent(context,MyService.class);
//starting it manually first because API 19+ doesn't deliver exact alarms, but we want a run now
context.startService(intent);
intent = new Intent(context,ServiceReceiver.class);
int minutes=PreferenceManager.getDefaultSharedPreferences(context).getInt("timer",R.integer.timer_def);
final PendingIntent pendingIntent= PendingIntent.getBroadcast(context.getApplicationContext(),1,intent,PendingIntent.FLAG_UPDATE_CURRENT);
AlarmManager alarmManager=(AlarmManager) context.getSystemService(Context.ALARM_SERVICE);
alarmManager.setRepeating(AlarmManager.ELAPSED_REALTIME_WAKEUP, SystemClock.elapsedRealtime(),minutes*60000,pendingIntent);
}
レシーバー (WakefulBroadcastReceiver) の onreceive メソッド:
@Override
public void onReceive(Context context, Intent intent) {
Log.e("SERV-RECEIVER ","triggered");
startWakefulService(context,new Intent(context,MyService.class));
}
これが発生すると、SERV-RECEIVER ログが表示されないため、レシーバーも起動されないことに注意してください。私のインテント サービスは、SQLite データベースを開き、いくつかの作業を行い、それを閉じてから、ウェイクロックを解放します。受信者は、インテントなしで Android マニフェストに登録されます。
<receiver android:name=".ServiceReceiver" android:enabled="true"/>
デバイスを居眠りモードに設定し、アプリを adb コマンドを使用して手動でスタンバイに設定しようとしましたが、デバイスを起動した後も正常に動作します。問題は、しばらく放置した場合にのみ発生します。adb shell dumpsys alarm を使用して、これが常に表示されていることに気付きました (アラームが停止した後でも)
trigerring):
u0a229:com.isoc.android.monitor +2s384ms running, 37 wakeups:
+2s384ms 37 wakes 37 alarms, last -6m33s804ms:
*walarm*:com.isoc.android.monitor/.ServiceReceiver
しかし、これは問題が発生すると消えます (バッチセクションから):
ELAPSED_WAKEUP #0: Alarm{99ac864 tag *walarm*:com.isoc.android.monitor/.ServiceReceiver type 2 when 340221779 com.isoc.android.monitor}
tag=*walarm*:com.isoc.android.monitor/.ServiceReceiver
type=2 whenElapsed=-971ms when=-5s971ms
window=+3m45s0ms repeatInterval=300000 count=0 flags=0x0
operation=PendingIntent{14dfacd: PendingIntentRecord{82c6f82 com.isoc.android.monitor broadcastIntent}}
Android API 15 モバイルでは、この問題は発生しないことに気付きました。私のAndroidマシュマロ電話でのみ...どんな助けも大いに感謝します:)ありがとう