Android のセキュリティ モデルを考慮して、カスタム アクセス許可を試しています。アプリケーションでブロードキャスターのアクセス許可を強制しようとしています。シナリオは、次のようなブロードキャストをトリガーするアクティビティ A があることです (許可あり):
Intent updateUserBroadcast = new Intent();
updateUserBroadcast.setAction("android.intent.action.ACTION_UPDATE_USERNAME");
updateUserBroadcast.putExtra("username", userName);
sendBroadcast(updateUserBroadcast, "com.android.MaliciousApp.RECEIVE_BROADCAST");
このアクティビティ A では、次のように onCreate にレシーバーを登録します。
private BroadcastReceiver mUpdateUsernameReceiver = new BroadcastReceiver() {
@Override
public void onReceive(Context context, Intent intent) {
Log.v("gaurav", "onReceive called");
SharedPreferences prefs = context.getSharedPreferences("profilePref", Context.MODE_WORLD_READABLE);
SharedPreferences.Editor editor = prefs.edit();
editor.putString("username", intent.getStringExtra("username"));
editor.apply();
Toast.makeText(context, context.getString(R.string.string_successfully_updated), Toast.LENGTH_SHORT).show();
}
};
受信者は必要な権限を持っているため、ブロードキャストを受信することを期待しています。ただし、アクティビティによって送信されたブロードキャストは受信しません。LocalBroadcastManager を使用しない理由については議論があるかもしれませんが、私の動機は、このメソッドが期待どおりに機能しない理由を突き止めることです。
マニフェストでレシーバーを宣言しておらず、動的にのみ登録しています。上記のコードはすべて、同じアプリケーション内の単一のアクティビティからのものです。したがって、ここでは IPC は関係ありません。許可を確認するための簡単な例です。どんな助けでも大歓迎です。