5

完全に制御できるアプリが 2 つあります。どちらも同じ証明書で署名されており、まったく同じインテント フィルターを使用しています。1 つはフラグメントからブロードキャストを送信し、もう 1 つはそれを受信して​​何かを行うことになっています。ただし、これは機能していません。

Strings.FILTER_INIT_REGISTER = "com.app.FILTER_INIT_REGISTER"

Intent intent = new Intent(Strings.FILTER_INIT_REGISTER);
getActivity().sendBroadcast(intent);

ReportingReceiver クラスを含むアプリのマニフェスト アプリ タグにレシーバーを登録しました。

<receiver             
    android:name=".receivers.ReportingReceiver"
    android:exported="true"
    >
        <intent-filter>
            <action android:name="com.app.FILTER_INIT_REGISTER" />
            <category android:name="android.intent.category.DEFAULT" />                
        </intent-filter>
</receiver>

ReportingReceiver クラスがインテント コールを受け取らない理由に興味がありますか?

4

2 に答える 2

14

アプリケーションにサービスとレシーバしかない場合、これは Android 3.1 以降では機能しません。これは、システムがSTOPPED STATEにあるアプリケーションにブロードキャスト インテントを送信しないためです。アプリケーションが最初にインストールされたとき、アプリケーションはSTOPPED STATEにあります。ユーザーが最初にアプリケーションを手動で起動すると、 STOPPED STATEから削除されます。ユーザーがアプリケーション マネージャー ツールを使用してアプリケーションを強制的に停止すると、 STOPPED STATEに戻ります。

アプリケーションにはアクティビティがないため、ユーザーがそれを「開始」する方法はありません。したがって、停止状態から抜け出すことはありません。

http://developer.android.com/about/versions/android-3.1.html#launchcontrolsを参照してください。

于 2012-10-10T22:34:29.430 に答える
7

AndroidAddictがDavidWasserの回答に対するコメントで述べているように、この動作を回避する方法があります。

呼び出し元のインテントに次のフラグを追加するだけです。これにより、「停止した」アプリケーションからのブロードキャスト受信機にも確実に到達できます。

http://developer.android.com/reference/android/content/Intent.html#FLAG_INCLUDE_STOPPED_PACKAGES

このAndroid3.1の変更について詳しくは、こちらをご覧ください

http://developer.android.com/about/versions/android-3.1.html#launchcontrols

そしてここ

http://code.google.com/p/android/issues/detail?id=18225

于 2012-11-14T12:04:05.803 に答える