Android:コンテキスト登録ブロードキャスト受信者はエクスポートされていますか?

StackOverflow https://stackoverflow.com//questions/11675245

質問

ブロードキャスト受信機をこのような私の活動の中で登録した場合、

@Override
protected void onResume() {
    super.onResume();

    myReceiver = new BroadcastReceiver() { ... };
    IntentFilter filter = new IntentFilter("com.example.MY_ACTION");
    registerReceiver(myReceiver, filter);
}
.

この受信機は輸出されていますか?別のアプリがcom.example.MY_ACTIONをブロードキャストする場合は、myReceiverによって受信されますか?

文字列権限を受け入れるregisterReceiver()の形式を使用する必要があると仮定して、その許可を私のマニフェストに定義し、それに高い保護レベル(署名など)を与えます。あれは正しいですか?より単純な方法はありますか?

ありがとう。

他のヒント

他の作業と私自身のアーカイブ目的のために予備するために:はい、コンテキスト登録受信機はデフォルトでエクスポートされたです。

あまり Documentation カスタムブロードキャストを送信する別のアプリを実行することで、これを素早く検証できます。私はこれをAPI 16-29でテストし、放送は受信され、それですべてのパッケージはあなたの受信者に送ることができます(これはセキュリティ欠陥になる可能性があります)。


ローカルブロードキャストを使用せずに問題を解決するため(可能な限り使用する)は、カスタムアクセス許可とその権限を要求したアプリへのブロードキャストを制限します。 完全性のために:

マニフェストのカスタム許可を定義して使用する:

<permission android:name="com.example.bcrtest.BROADCAST_PERMISSION"
    android:protectionLevel="signature"/>
<uses-permission android:name="com.example.bcrtest.BROADCAST_PERMISSION" />
.

許可付きレジスタレジスタ:

registerReceiver(mReceiver, new IntentFilter(MY_INTENT_ACTION), "com.example.bcrtest.BROADCAST_PERMISSION", null );
.

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top