1

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

4

1 回答 1

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>

您可以在此处参考有关权限的文档。

于 2015-12-18T11:28:02.277 回答