0

前夜/特定の時間に宿題をユーザーに思い出させるアラームを作成したい宿題プランナーアプリケーションがあります。ユーザーが新しい宿題項目を作成し、データベースに追加する AddNewHomework というアクティビティがあります。次に、このコードが呼び出されます。

Intent i = new Intent(this, AlarmNotificationReceiver.class);
i.putExtra("title", title);
PendingIntent pi = PendingIntent.getBroadcast(this.getApplicationContext(), (int) id, i, 0);
AlarmManager mAlarm = (AlarmManager) getApplicationContext().getSystemService(Context.ALARM_SERVICE);
mAlarm.set(AlarmManager.RTC_WAKEUP,
System.currentTimeMillis() + 10 * 1000, pi);

これにより、10 秒でトリガーされる新しいアラームが作成され、通知が作成されます。

私の問題は、ListView を含み、データベースに保存されているすべての宿題を表示する HomeworkList という別のアクティビティがあることです。ユーザーが 1 つを長くクリックすると、それを削除するオプションがありますが、データベースから削除してもアラームは削除されません。

アラームを削除するために使用できるコードを探しましたが、この別のアクティビティからアラームをキャンセルする方法を理解できるものは見つかりませんでした。PendingIntent を同じにする必要があることはわかっていますが、他のクラスからコンテキストにアクセスできないため、これを行うにはどうすればよいですか。(私は思わない)。

4

2 に答える 2

1

それが役立つ場合は、現在のコンテキストの静的ゲッターを作成することにより、別のアクティビティからコンテキストにアクセスできます。上記のクラスで、プライベート フィールドを作成するだけです。

private static Context context;

public static Context getAppContext(){
    return MyActivity.context;
}

次に、onCreate メソッドに次のように追加するだけです。

MyActivity.context = getApplicationContext();

別のアクティビティからコンテキストにアクセスすることは非常に簡単になりました。「MyActivity」から取得したコンテキストを使用して、アラームをキャンセルできます。

于 2012-04-07T15:01:26.953 に答える
1

この Android によると: コンテキストは、アラームをキャンセルするために使用される filterEquals() に影響しますか? 異なるコンテキストを使用しても問題ありません。これは、一致としての PendingIntent の認識には影響しません。私は自分のアプリでこれを確認しました。アクティビティをコンテキストとして使用してあるアクティビティからアラームを設定し、そのアクティビティのコンテキストを使用して別のアクティビティからアラームをキャンセルしましたが、正常にキャンセルされました (アクションはトリガーされませんでした)。

于 2014-05-19T17:03:09.863 に答える