5

私はこのAndroid環境全体に慣れていないので、通常、非常に基本的な知識と少しばかげていると考えられるかもしれないという疑問があります。私は自分が持っている疑問と、なぜそれを持っているのかを説明するために最善を尽くします。

私はあなたが望む学者のクラスを思い出させるためにあなたが通知を設定することができるアプリケーションをやっています。BroadcastReceiverを拡張するクラスを実行したので、デバイスの起動後にすべてのアラームをリセットできます。クラス、構成する必要のある時間など、アラームに関する情報を保持するデータベースがあります。すべてのアラームを取得し、次のようにalarmManagerに設定します。

intent = new Intent(ctxt.getApplicationContext(), Notificacion.class);
intent.putExtra("TAG", tag);
intent.putExtra("SUBJECT", cursor2.getString(0));
intent.putExtra("AULA", cursor2.getString(1));                  
displayIntent = PendingIntent.getBroadcast(ctxt, Integer.parseInt(tag), intent, PendingIntent.FLAG_UPDATE_CURRENT );               
alarmManager.setRepeating(AlarmManager.RTC_WAKEUP, calendar.getTimeInMillis(), AlarmManager.INTERVAL_DAY*7, displayIntent);

まあ、これはここまでうまくいくはずだと思います。問題は、アプリを使用して通知を設定する場合、クラス「Schedule.class」からそれを実行しているため、インテントに次のコンテキストが含まれることです。

Intent intent = new Intent(getApplicationContext(), Notification.class);
PendingIntent pend = PendingIntent.getBroadcast(this, Integer.parseInt(tag), intent, PendingIntent.FLAG_UPDATE_CURRENT);

アプリでは、アラームを削除できます。これを行うには、alarmManager.cancel(pend)を呼び出す必要があります。だから私の疑問はそれがそれをキャンセルすることができるかどうかです。

コンテキストが異なる場合、BroadCastReceiver(ctxt)の拡張機能で取得したコンテキストから設定され、Schedule.classから取得したコンテキストでアラームが設定されたため、保留中のインテントとの一致は見つかりません。 。

それで..アプリケーションコンテキストは常に同じですか?何が起こっているかについて他のクラスに情報を提供するためにコンテキストが設定されていることは知っていますが、インテントフィルターがコンテキストが提供された場所を区別するかどうかはわかりません。

前もって感謝します!

4

1 に答える 1

2

使用しているキャンセル方法については、AlarmManagerのドキュメントを参照してください。

public void cancel(PendingIntent操作)

APIレベル1で追加

インテントが一致するアラームをすべて削除します。インテントがこれと一致する( filterEquals(Intent)定義されている )任意のタイプのアラームはキャンセルされます。

したがって、Intent.filterEqualsのドキュメントには次のように記載されています。

public boolean filterEquals(Intent other)

APIレベル1で追加

インテント解決(フィルタリング)の目的で、2つのインテントが同じであるかどうかを判別します。つまり、アクション、データ、タイプ、クラス、およびカテゴリが同じである場合。これは、インテントに含まれる追加のデータを比較しません。

アクション、データ、タイプ、クラス、またはカテゴリが明示的なインテントごとに異なる理由は考えられません(明らかに、それらを変更するために邪魔にならない限り)。コンテキストは一致の基準に含まれていないように見えるので、最初にどのコンテキストを使用して作成したかに関係なく、キャンセルされることはかなり自信があると思います。

于 2012-11-28T22:01:50.900 に答える