Android:コンテキスト登録ブロードキャスト受信者はエクスポートされていますか?
-
12-12-2019 - |
質問
ブロードキャスト受信機をこのような私の活動の中で登録した場合、
@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 );
.