1

私のアプリでは、複数のアラームが同時に設定されます。残念ながら、各アラームは同じPendingIntentオブジェクトで設定されています。アラームを設定するために使用しているコードは次のとおりです。

//Use AlarmManager to trigger the notification/alarm.
AlarmManager alarmManager = (AlarmManager) getSystemService(ALARM_SERVICE);

//PendingIntent to launch activity when the alarm triggers.                    
Intent i = new Intent("com.testapp.DisplayNotification");

//Assign the reminder's primary key as the notification ID.
i.putExtra("Reminder_Name", editRemindMeTo.getText().toString());
i.putExtra("Reminder_Primary_Key", reminderPrimaryKey);

PendingIntent displayIntent = PendingIntent.getActivity(
getBaseContext(), 0, i, 0);               

//Set the alarm to trigger.
alarmManager.set(AlarmManager.RTC_WAKEUP, 
c.getTimeInMillis(), displayIntent);

次のコードを使用してアラームを削除できることを知っています。

AlarmManager alarmManager = (AlarmManager) context.getSystemService(Context.ALARM_SERVICE); 

Intent i = new Intent(context, MyPendingIntentService.class);
PendingIntent displayIntent = PendingIntent.getService(context, 0, i, 0);

alarmManager.cancel(displyIntent);

ただし、このコードを使用すると、すべてのアラームが削除されます(ここで間違っている場合は修正してください)。ユーザーがデータベースから削除したアラームだけを削除する方法はありますか?ユーザーがアプリのデータベースのアラームエントリを削除した直後に、アプリからアラームを削除する必要があります。異なるPendingIntent名を使用するのが良い方法だと思いますが、ユーザーが作成する新しいアラームごとにこれを行う方法がわかりません。これを行う方法についての考え?ありがとう!

4

3 に答える 3

4

以前にここで直面したのと同じ問題を参照してください...したがって、解決策は、アラームサービスに一意の保留中のインテントを渡すことです。

PresidentingIntent pIntent = PresidentingIntent.getBroadcast(context、(int)alarm_id、intent、PendingIntent.FLAG_CANCEL_CURRENT);

ここで保留中のインテントで、一意のリクエストIDを保留中のインテントに渡しました。アラームをキャンセルするときに覚えておく必要があること。したがって、私の場合、一意のIDを生成するために行ったことは、それをデータベースに配置し、テーブル行のIDを取得して、保留中のインテントに渡しました。
したがって、特定のアラームをキャンセルする場合は、同じテーブルエントリを使用して、保留中のインテントの同じリクエストIDを覚えておく必要があります...

私はそれがうまくいくと確信しています。

于 2012-09-25T05:33:09.517 に答える
2

requestCode各アラームを登録するときは、異なるものを使用してください。これはの2番目のパラメータですPendingIntent.getActivity/Service()

于 2012-09-25T05:23:58.083 に答える
1

Androidのドキュメントから、cancel()は同じpendingIntentを持つすべてのアラームをキャンセルします。したがって、唯一の解決策は、異なるpendingIntentsを作成することです。または、繰り返しアラームをスケジュールすることもできます。このようにして、同じpendingIntentsを使用できます。

于 2012-09-25T05:26:16.363 に答える