2

単一のカスタム カテゴリを指定するインテント フィルターを備えたブロードキャスト レシーバーがあります。

    <receiver
        android:name=".sys.sub.SubServiceManager"
        android:enabled="true"
        android:exported="false" >
        <intent-filter>
            <category android:name="com.example.SUB_SERVICE_STATE" />
        </intent-filter>
    </receiver>

次に、そのインテント カテゴリとカスタム アクションを使用してブロードキャストを発行するコードがあります。私の問題は、ブロードキャストが受信されないことです。

    Intent speed = new Intent();
    speed.addCategory(inst.getString(R.string.subServiceCat));
    speed.setAction("com.example." + SubServiceManager.START_COMMAND + Example.NAME);
    inst.sendBroadcast(speed);

R.string.subServiceCat は、intent-filter で定義されたものと同じ文字列を保持します。

カスタム カテゴリ インテント フィルタのために他に何かしなければならないことはありますか?

4

1 に答える 1

3

ドキュメントによると:

このテスト(アクションテスト)に合格するには、インテントオブジェクトで指定されたアクションが、フィルターにリストされているアクションの1つと一致する必要があります。オブジェクト(インテント)またはフィルターでアクションが指定されていない場合、結果は次のようになります。

  • フィルタがアクションの一覧表示に失敗した場合、一致するインテントはないため、すべてのインテントがテストに失敗します。インテントはフィルターを通過できません。
  • 一方、アクションを指定しないIntentオブジェクトは、フィルターに少なくとも1つのアクションが含まれている限り、自動的にテストに合格します。

フィルタでアクションが指定されていないため、インテントがフィルタを通過できないことがわかります。この問題を解決するには、レシーバーのフィルターにアクションを指定するか、インテントにアクションを指定しないでください。

于 2012-07-23T03:44:39.253 に答える