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