9

アラームを使用してサーバーからデータを取得します。 私はユーザーにアラームの開始と停止のオプションを与えるのが好きです。 これは、アラームが既に設定されているかどうかを確認して確認する必要があることを意味します。 私はアラームがすでに設定されている場合は私に語ったいくつかのコードが見つかりました:アラームはすでに、私はそれをキャンセルしたが、それが設定されていない場合、私は(トグルのような)に設定している場合アラームを設定してリセットするAndroid AlarmManagerの問題

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が離れて行くのです作るためにアラームをキャンセルした後に何かをリセットするにはアム。

+1

私は本当にわからないあなたは、アラームが既に存在するかどうかを確認するためにチェックを実行している理由。あなたの推論を説明してもらえますか? –

+0

トグルのオン/オフとして機能するボタンが必要でした。また、アプリのクラッシュによってアラーム設定が失われた場合は、ボタンをインジケータとして使用します。ユーザーがウィジェットをクリックしたときにウィジェットを更新するためにアラームを使用して、アラームが設定されているかどうかをユーザーが確認できるアクティビティを開きます。私が恐れているのは、アラームを設定した後、電源がオフになり、ユーザーはオフであることを知らないということです。 – Kemal

答えて

49

AlarmManagerをキャンセルする場合は、PendingIntentにフラグFLAG_CANCEL_CURRENTを使用しないでください。 代わりに、明示的にアラームをキャンセルした後PendingIntentをキャンセル:

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(); 
+1

ありがとうございました。 p.cancel()はここで助けました! – Karussell

+7

助けがあればこれを答えにする必要があります。 –

+1

他の投稿のどれも 'PendingIntent'と' AlarmManager'の取り消しを扱うものがなく、 '(PendingIntent.getBroadcast(getBaseContext()、0、checkIntent、PendingIntent.FLAG_NO_CREATE)!= null); '私のアラームが実行されているかどうかを確認するために、これは私の活動を再開することなく働く唯一のものです。よくやった。 –

関連する問題