私は活動がサービスに送信するいくつかの意図を持っています。 それらのすべてがマニフェストに登録されていますアンドロイド:なぜ意思broadcastrecieverで受信していないのですか?
<service android:name=".location.LocationService" android:label="@string/location_service_started">
<intent-filter>
<action android:name="@string/location_service_set" />
<action android:name="@string/location_service_start" />
<action android:name="@string/location_service_stop" />
</intent-filter>
</service>
しかし、唯一のlocation_service_startとlocation_service_stop意図が受信されています。理由は何でしょうか? 私の受信機のコードがあります:
private BroadcastReceiver LocationServiceReceiever = new BroadcastReceiver() {
@Override
public void onReceive(Context context, Intent intent) {
if(intent.getAction().equals(getString(R.string.location_service_stop)))
{
showMessage("stop");
}
if(intent.getAction().equals(getString(R.string.location_service_start)))
{
showMessage("start");
}
if(intent.getAction().equals(getString(R.string.location_service_set)))
{
showAlertBox("set");
}
}
};
だから私は、メッセージを「設定」を参照してくださいことはありません。私も、「開始」と同じ場所でメッセージを「設定」、まだすべて同じためsendBroadcastを入れて試してみました。 "スタート" - OK、 "セット" - 決して受け取られません。インテントを発射
機能:
protected void start()
{
Intent intent = new Intent(getString(R.string.location_service_start));
getApplicationContext().sendBroadcast(intent);
}
protected void set(double lat, double lon, double rad)
{
Intent intent = new Intent(getString(R.string.location_service_set));
intent.putExtra("lat", lat);
intent.putExtra("lon", lon);
intent.putExtra("rad", rad);
getApplicationContext().sendBroadcast(intent);
}
どちらが正しい送信しているが、エラーなしで、アクションが正しいです。
UPD:
ああ、私のせい。 filter.addAction ...を新しいインテントに追加するのを忘れました。 すみません。しかし、答えは本当に便利でした!ありがとうございました!
ありがとうございます。それは便利です。サービスには登録されていないが、サービスに登録されている放送受信機には意図があることはわかっています。しかし、それは問題を解決しません。 – Ksice
"あなたがやっていることがわからない限りgetApplicationContext()を使わないでください" - 現在のアクティビティを越えるスコープのブロードキャストに対してgetApplicationContext()を使用する方が良いのではないですか?私は、放送は完了していないが、アクティビティはリサイクルされないだろうと思っていますが、あなたのコメントを見てもわかりません。あなたはコメントできますか? – auval
@uval: "現在のアクティビティを超えたスコープのブロードキャストに対してgetApplicationContext()を使用する方が良いのですか?" - いいえ。 「放送は完了していないが、活動はリサイクルされないと思う」 - ブロードキャストは放送局の立場から言えばマイクロ秒単位で「完全」になる。全てのフレームワークレベルの放送(例えば、 'sendBroadcast()')はIPCを伴う。したがって、「Context」は、ブロードキャスト要求をコアOSプロセスに送信し、その時点で「Context」の作業が完了する。 – CommonsWare