Android广播接收器自定义权限

时间:2015-12-18 06:41:47

标签: android security permissions android-broadcastreceiver

鉴于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,只是一个检查权限的简单示例。任何帮助将不胜感激。

1 个答案:

答案 0 :(得分:2)

如果您想通过具有权限的广播发送意图,则应使用

注册广播接收器
registerReceiver(receiver, intentFilter, "com.android.MaliciousApp.RECEIVE_BROADCAST", null);

在您的清单中,您必须告知授予您应用的权限。

<manifest>
    ...
    <uses-permission android:name="com.android.MaliciousApp.RECEIVE_BROADCAST" />
    <permission android:name="com.android.MaliciousApp.RECEIVE_BROADCAST" />
    ...
</manifest>

您可以参阅有关权限here的文档。