11

アラームを使用してサーバーからデータをフェッチします。アラームを開始および停止するオプションをユーザーに提供したいと思います。これは、アラームがすでに設定されているかどうかを確認する必要があることを意味します。アラームがすでに設定されているかどうかを示すコードを見つけました。

Intent I = new Intent(getApplicationContext(),AlarmReceiver.class);
PendingIntent P = PendingIntent.getBroadcast(getApplicationContext(), 0, I, PendingIntent.FLAG_NO_CREATE);
found = (P!=null);

アラームがすでに設定されている場合はキャンセルしますが、設定されていない場合は設定します (トグルのように)

問題は、これが一度しか機能しないことです。上記のコードで既存のアラームを初めてチェックすると、アラームがないことを示す null が返されますが、アラームをキャンセルすると、何かへのポインタが返されますが、アラームは実行されていません。

ここにアラームを設定するコードがあります

am = (AlarmManager) getSystemService(getApplicationContext().ALARM_SERVICE);
Intent I = new Intent(getApplicationContext(),AlarmReceiver.class);
PendingIntent P = PendingIntent.getBroadcast(getApplicationContext(), 0, I, PendingIntent.FLAG_CANCEL_CURRENT);
am.setRepeating(AlarmManager.RTC_WAKEUP, System.currentTimeMillis(), 60000, P); 

アラームをキャンセルするコードは次のとおりです。

am = (AlarmManager) getSystemService(getApplicationContext().ALARM_SERVICE);
Intent I = new Intent(getApplicationContext(),AlarmReceiver.class);
PendingIntent P = PendingIntent.getBroadcast(getApplicationContext(), 0, I, PendingIntent.FLAG_CANCEL_CURRENT);
am.cancel(P);

PendingIntent をなくすためにアラームをキャンセルした後、何かをリセットする必要がありますか。

4

1 に答える 1

53

をキャンセルするときは、 のフラグをAlarmManager使用しないでください。代わりに、アラームをキャンセルした後に明示的にキャンセルします。PendingIntentFLAG_CANCEL_CURRENTPendingIntent

am = (AlarmManager) getSystemService(getApplicationContext().ALARM_SERVICE);
Intent i = new Intent(getApplicationContext(),AlarmReceiver.class);
PendingIntent p = PendingIntent.getBroadcast(getApplicationContext(), 0, i, 0);
am.cancel(p);
p.cancel();
于 2011-02-20T05:57:26.750 に答える