アプリがバックグラウンドにある間に10分ごとにアラームでトリガされるサービスで何かをするアプリケーションがあります。ユーザーが実際に最近のアプリからアプリケーションを削除したり、強制的に設定から強制終了したり(またはログオフされている場合)、OSがアプリケーションを終了してもアラームが消えないようにする(死んで再起動する必要がある)すでに動作しています)。私は多くの異なるアプローチを試みました、最新の私はこれを試しましたhttp://www.dotkam.com/2011/01/10/android-prefer-alarms-and-intent-receivers-to-services/運がない。私のアラームはこのように見えます。 最近のアプリから削除されたときにアラームが消滅するか、強制終了したユーザだけ
if(ActivityLifecycleHandler.isApplicationInForeground()) {
return; // If App is in foreground do not start alarm!
}
String alarm = Context.ALARM_SERVICE;
AlarmManager am = (AlarmManager) context.getSystemService(alarm);
Intent intent = new Intent(locationBroadcastAction);
PendingIntent pi = PendingIntent.getBroadcast(context.getApplicationContext(), 0, intent, 0);
int type = AlarmManager.ELAPSED_REALTIME_WAKEUP;
// Set trigger time to 0, because want to fire off the first one instantly
am.setRepeating(type, 0, ONE_MINUTE, pi);
そしてBroadcastReceiver:
public class LocationBroadcastReceiver extends BroadcastReceiver{
@Override
public void onReceive(Context context, Intent intent) {
Intent myIntent = new Intent(context, LocationService.class);
context.startService(myIntent);
}
}
私が間違っているのかの任意のアイデア? OSがアプリを殺すまでは、すべてうまく動作します。
Aaah、great!ええ、実際にはそれもアラームの全体のポイントだと思ったが、私はちょうどそれが正常に動作するようになることができなかったので、私は疑いがあった。私はこれを試して、それが動作するかどうかを確認します。とにかく情報に感謝します。 Btwは、サービスが覚醒してから約5秒間何らかの方法で動作していることをユーザーに通知しますか? – Slagathor
ああ、アラームが実際には、アプリが死んだ後にダンプに表示されていません.. – Slagathor
それは変わった、私はAPI 21であなたのコードを試してみて、それは動作するようです。アプリが終了して画面がオフになっていても、プロセスが作成され、受信者がアラームを取得します。異なる可能性があるのは、レシーバが静的に登録されている(そうでなければ、システムはそれを再作成する方法を知らない)ことだけですが、アラームがリストから消える理由は説明されていません。 – bwt