2013-07-10 16 views
10

私は毎週2つのアラームを設定するアプリケーションを構築しています(特定の時間と分で)、アラームは週ごとに永遠に繰り返されます。Android AlarmManager:設定されているすべてのアラームをキャンセルする方法はありますか?

ここで重要な点は、ユーザーがアラームを変更した場合、以前に設定したアラームをキャンセルする必要があることです。

私のアプリケーションで設定されたすべてのアラームを単にキャンセルする方法はありますか?

私はあなたが目を得ることができると思い

答えて

13

以前のアラームをキャンセルする場合は、PendingIntentのフラグにPendingIntent.FLAG_CANCEL_CURRENTを設定します。すでに作成されている場合は、新しいPendingIntentの生成を防ぎます。そして、アラームに設定する前に、同じPendingIntentをキャンセルしてから、アラームを設定するようにしてください。次のようにしてください:

AlarmManager 2AlarmsInWeekAlarmManager = (AlarmManager) context.getSystemService(Context.ALARM_SERVICE); 
PendingIntent pendingIntent = PendingIntent.getService/getActivity(context, int, intent, PendingIntent.FLAG_CANCEL_CURRENT); 

2AlarmsInWeekAlarmManager.cancel(pendingIntent); 

次に、setまたはsetRepeatingメソッドを使用できます。 あなたのケースでは、それは

2AlarmsInWeekAlarmManager.setRepeating(AlarmManager.RTC_WAKEUP, "timeInMillis", "repetitionTimeInMillis", pendingintent); 

する必要がありますこれは、アラームを設定する前に、同じPendingIntentですべての以前のアラームを解除することを保証します。

あなたはこれを持っているといいですね!

+0

説明が必要です。 cancel()のドキュメントには、 "一致するインテントのアラームをすべて削除する"と書かれています。つまり、リクエストコードim getBroadcast(コンテキストコンテキスト、int requestCode、Intent intent、int flags)も同じである必要がありますか?どうか明らかにしてください。 – user2731584

+1

こんにちは、ドキュメントは 'requestCode'についてあまり言及していません。しかし、[PendingIntent](http://developer.android.com/reference/android/app/PendingIntent.html)に 'getBroadcast'があると、それは' PendingIntent'を取得します。だから**私の知る限り**あなたが別の 'requestCode'を置くと2つの異なる' PendingIntent'が得られますので、それをキャンセルすると希望のものではなく 'PendingIntent'になります! [このリンク](http://developer.android.com/reference/android/app/PendingIntent.html#FLAG_CANCEL_CURRENT)もご覧ください。 – thegiga

+0

私に戻ってくれてありがとう。ドキュメントをもう一度読ませてください。クラスによって予定されているアラームのリストを要求することは、とにかくありませんでした。何か案が? – user2731584

関連する問題