7

Googleが提供するAndroid Oへの移行ガイドによると、暗示的なブロードキャストの意図の大部分はマニフェストに登録されてはならない(わずかな例外を除いてhere)インテントはそのままです。暗示的なブロードキャスト受信機とマニフェストの明示的なブロードキャスト受信機を区別する

必要なブロードキャストをマニフェストから移動することを検討しています。しかし、レシーバが暗黙的であるかどうかをどのように認識しますか?一般的な規則はありますか?

ここでは、マニフェストに登録したブロードキャストのサンプルを示します。 「アクション」タグだけを見て、それをマニフェストに残すためにホワイトリストに登録されているかどうかを確認する必要がありますか?

<receiver 
    android:name=".receiver.ImageBroadcastReceiver" 
    android:enabled="true" > 
    <intent-filter> 
     <action android:name="android.hardware.action.NEW_PICTURE" /> 
     <category android:name="android.intent.category.OPENABLE" /> 
     <data android:mimeType="image/*" /> 
    </intent-filter> 
</receiver> 

<receiver 
    android:name=".receiver.InstallReferrerReceiver" 
    android:exported="true"> 
    <intent-filter> 
     <action android:name="com.android.vending.INSTALL_REFERRER" /> 
    </intent-filter> 
</receiver> 

<receiver android:name=".receiver.JoinEventReceiver" > 
    <intent-filter> 
     <action android:name="JOIN_ACTION" /> 
     <action android:name="CANCEL_ACTION" /> 
     <action android:name="DECLINE_ACTION" /> 
    </intent-filter> 
</receiver> 

たとえば、「com.android.vending.INSTALL_REFERRER」インテントはホワイトリストに登録されていません。アクティビティに登録する必要がありますか?もしそうなら、私たちがそれを登録するときにアプリが既にインストールされているように解雇されることはありませんか?これは、放送受信機が暗黙的であるか明示的であるかを理解しようとすると、私が「アクション」タグをチェックしなければならないと思ったので混乱します。

答えて

12

しかし、レシーバが暗黙的であるかどうかをどのように認識しますか?

IntentComponentNameを持っている場合、Intentは明示的です。それ以外の場合は暗黙的です。直接それが直接に置くことができIntent(例えば、new Intent(this, TheReallyAwesomeReceiver.class

  • に置くことができ

    • ComponentNameを含む、いくつかのいずれかの方法で得ることができることを

      queryIntentReceivers()を使用した後ののアクションストリングなどに基づいて正しいものを見つけると、

    • アクション文字列などからシステムによってivedプラスsetPackage()

    経由で定義されたパッケージには、私たちは、「アクション」のタグでだけ見て、マニフェストにそれを維持するホワイトリストであるかどうかを確認する必要がありますか?あなたはまた、放送の性質を考える必要があり

    番号:それはどの登録レシーバをに行く、または、特定のアプリにされますか?

    たとえば、「com.android.vending.INSTALL_REFERRER」インテントはホワイトリストに登録されていません。アクティビティに登録する必要がありますか?

    いいえ、ブロードキャストは最近インストールされたアプリにのみ適用されるため、明示的にIntentにする必要があります。アクション文字列などは、登録された受信者のどれが関連するものかをシステムが判断するのに役立ちます。

    ACTION_PACKAGE_ADDEDとは対照的です。それは登録された受信者にブロードキャストされます。それはただ一つの特定のアプリには向かない。そのため、は暗黙的でなければなりません(そうでない場合は、特定のアプリ内で特定の受信者を識別するComponentNameとなります)。 ACTION_PACKAGE_ADDEDはホワイトリストに載っていないため、Android 8.0以降のマニフェストでこのブロードキャストに登録することはできません。

  • 関連する問題