0

私のアプリケーション myApp1 には、レシーバーが 1 つしかありません

<receiver
    android:name="com.plugins.Plugin">
    <intent-filter android:priority="1000" >
        <action android:name="Plugin.Broadcast" />
    </intent-filter>
</receiver>

そして、別のアプリケーション myApp2 から BroadcastReceiver をそのレシーバーに送信すると、

Intent activityIntent = new Intent();
activityIntent.setAction("Plugin.Broadcast");
activityIntent.putExtra("appWidgetId", finalAppWidgetId);
sendBroadcast(activityIntent);

応答しません。そして、myApp1 にいくつかの Activity with Launcher カテゴリを追加すると、Main アクションが myApp1 のインストール後に実行され、レシーバーが機能します。なぜそれが起こったのですか?どうすれば修正できますか?

回答:ブロードキャストが受信されたことを確認するには、意図にフラグを追加する必要があります。

 i.addFlags(Intent.FLAG_INCLUDE_STOPPED_PACKAGES);
4

1 に答える 1

0

Android 3.0 (Honeycomb) 以降、セキュリティ上の理由から、アプリは少なくとも 1 回起動されるまで (つまり、アクティビティが起動されるまで) ブロードキャストを受信できません。

BOOT_COMPLETEDこれは、悪意のあるアプリがインストールされ、やなどの一般的なブロードキャストで自動実行されるのを防ぐために行われましたBATTERY_CHANGED

このため、myApp1 のレシーバーは、そのアプリで少なくとも 1 回開かれた UI がある場合にのみ機能します。

于 2013-02-23T17:19:26.267 に答える