私の主な活動では、アプリが最初にロードされたときにアラームを設定するメソッド setRepeatingAlarm() があります。このメソッドは、列をループし、SQLite テーブルの各行から整数値を取得することで、アラームを正常に設定します。基本的な方法は次のとおりです。
for (int i : AlarmDays) {
Calendar cal = Calendar.getInstance();
if (cal.get(Calendar.MINUTE) >= i)
cal.add(Calendar.HOUR, 1);
cal.set(Calendar.MINUTE, i);
Intent intent = new Intent(ManageDebts.this, TimeAlarm.class);
pendingIntent = PendingIntent.getBroadcast(this, i,
intent, PendingIntent.FLAG_CANCEL_CURRENT);
am.setRepeating(AlarmManager.RTC_WAKEUP, cal.getTimeInMillis(),
60 * 60 * 1000, pendingIntent);
}
メソッドが完了すると、各行を再度ループし、それぞれを CustomAdapter (リスト) に入れてデータを表示します。これは、メイン クラスの onCreate のコンテキストです (これも基本的なものです)。
datasource = new DebtDataSource(this);
datasource.open();
**am = (AlarmManager) getSystemService(Context.ALARM_SERVICE);
setRepeatingAlarm();**
values = datasource.getAllDebt();
adapter = new MyArrayAdapter(this, values);
setListAdapter(adapter);
ユーザーが行を長押しするとアイテムが削除されるか、すべての行を削除するボタンがあります。すべてが機能しますが、アラームを消すことができません。
これを行う方法は理解していますが(同じ保留中のインテントを同じエクストラで設定してメソッドをキャンセルします)、私の試みは失敗しました!どこに置くべきかわかりませんか?上記はすべて同じクラスです。
ユーザーが 1 つの行を削除するかすべてを削除するかにかかわらず、簡単な方法は、すべてのアラームを削除し、そのメソッドを再度ループしてリセットすることだと思います。誰か助けて、このキャンセルコードをどこに置くべきか教えてもらえますか?