これでBroadcastReceiverを実行することができました:
<receiver
android:name=".AlarmReceiver"
android:enabled="true"
android:exported="false">
</receiver>
あなたが見ることができるように<intent-filter>
。Intent
適切なエクストラで正しく呼び出されます。しかし、私は周りを見回していて、必要かどうかについて混乱していますか?私はsetAction()
自分のメソッドを呼び出していますがIntent
、実際にはそのアクションの文字列を使用せずに、通知に関する特定の問題を確実にするために他のメソッドとは異なるものにします。しかし、相関関係は正確には何ですか?前もって感謝します。
Intent intent = new Intent(this.getContext(), AlarmReceiver.class);
intent.setAction("com.something"+System.currentTimeMillis());
//... extras are here
PendingIntent pi = PendingIntent.getBroadcast(this.getContext(), 123, intent, PendingIntent.FLAG_CANCEL_CURRENT|Intent.FILL_IN_DATA);
AlarmManager alarm = (AlarmManager)getContext().getSystemService(Activity.ALARM_SERVICE);
alarm.set(AlarmManager.RTC_WAKEUP, time.getTimeInMillis(), pi);
マニフェストファイルにあるものでそれを使用すると機能します。
編集 私はこれをAndroidDevelopersブログで見つけました、そしてそれはこれを述べています:
暗黙的インテントは、アクション、カテゴリ、データ、MIMEタイプなどを使用して、一致する「対象」のみを指定します。それらが見つける正確なコンポーネントは、実行時にのみ、パッケージマネージャーが現在のアプリケーションと照合することによって決定されます。
明示的インテントは、ComponentNameを介して、一致する必要がある単一の明示的な「誰」を指定します。インテントに他に何があるかに関係なく、ComponentNameで指定された正確なマニフェストパッケージ名とクラス名にのみ関連付けられます。
私はまだこの説明と少し混乱していますが、それは私がすべきことに最も近いことのようです。したがって、暗黙のインテントを使用していると確信しています。質問は、私が省略しても大丈夫<intent-filter>
ですか?特定のクラスに合わせています。それらを結びつける実際の行動はないかもしれませんが、それ自体はクラスで十分ですか?