我正在学习“学习Android” - Oreilly - Marko Gargenta。
我在第11章(广播接收者)
我跟着这本书,一切正常。但我有一个问题是如何使用自定义权限来限制在单个应用程序中发送和接收广播。
这本书很清楚这个主题。但我觉得有些东西不见了。
接收者和发送者如何告诉对方不同的权限?
在AndroidManifest.xml
档案中:
<permission
android:name="saleh.yamba.SEND_TIMELINE_NOTIFICATIONS"
android:description="@string/send_timeline_notifications_permission_description"
android:label="@string/send_timeline_notifications_permission_label"
android:permissionGroup="android.permission-group.PERSONAL_INFO"
android:protectionLevel="normal" />
<permission
android:name="saleh.yamba.RECEIVE_TIMELINE_NOTIFICATIONS"
android:description="@string/receive_timeline_notifications_permission_description"
android:label="@string/receive_timeline_notifications_permission_label"
android:permissionGroup="android.permission-group.PERSONAL_INFO"
android:protectionLevel="normal" />
<uses-permission android:name="saleh.yamba.SEND_TIMELINE_NOTIFICATIONS" />
<uses-permission android:name="saleh.yamba.RECEIVE_TIMELINE_NOTIFICATIONS" />
在发送广播的服务中:
Intent intent = new Intent("saleh.yamba.NEW_STATUS");
updaterService.sendBroadcast(intent, "saleh.yamba.RECEIVE_TIMELINE_NOTIFICATIONS");
此处,发件人以saleh.yamba.RECEIVE_TIMELINE_NOTIFICATIONS
权限发送意图,好的,接收者如何知道此权限?
在通过BroadcastReceiver
接收广播的活动中:
TimelineReceiver receiver;
IntentFilter filter;
protected void onCreate(Bundle savedInstanceState)
{
receiver = new TimelineReceiver();
filter = new IntentFilter("saleh.yamba.NEW_STATUS");
}
protected void onResume()
{
this.registerReceiver(receiver, filter, "saleh.yamba.SEND_TIMELINE_NOTIFICATIONS", null);
}
protected void onPause()
{
this.unregisterReceiver(receiver);
}
private class TimelineReceiver extends BroadcastReceiver
{
@Override
public void onReceive(Context context, Intent intent)
{
//do something.
}
}
接收方在此接受另一项许可。 OK,
接收者如何了解saleh.yamba.RECEIVE_TIMELINE_NOTIFICATIONS
接收器部分的代码中没有任何内容告诉仅当接收方具有BroadcastReceiver
权限时才会调用saleh.yamba.RECEIVE_TIMELINE_NOTIFICATIONS
。
答案 0 :(得分:0)
接收方部分的代码中没有任何内容告诉仅当发送方具有saleh.yamba.RECEIVE_TIMELINE_NOTIFICATIONSpermission时才会调用BroadcastReceiver。
是的,有。您已将saleh.yamba.RECEIVE_TIMELINE_NOTIFICATIONS
传递给registerReceiver()
。
具体来说,您正在使用the four-parameter version of registerReceiver()
,其中第三个参数是“字符串命名广播公司必须保留的权限才能向您发送意图。如果为null,则不需要权限。”