【发布时间】:2011-12-15 14:49:39
【问题描述】:
我有一个以广播开头的应用程序插件。我已经设法添加了自定义权限,因此只有拥有该权限的应用才能接收广播。
但是,我不知道如何实现更重要的部分:我如何检查,如果发送者有自定义权限,那么只有我的主应用可以发送广播?
我知道这是可能的,但我不知道该怎么做。
谢谢!
【问题讨论】:
标签: android permissions broadcastreceiver broadcast
我有一个以广播开头的应用程序插件。我已经设法添加了自定义权限,因此只有拥有该权限的应用才能接收广播。
但是,我不知道如何实现更重要的部分:我如何检查,如果发送者有自定义权限,那么只有我的主应用可以发送广播?
我知道这是可能的,但我不知道该怎么做。
谢谢!
【问题讨论】:
标签: android permissions broadcastreceiver broadcast
尝试使用:
Context ctx = ...;
int result = ctx.checkCallingPermission("your.permission.goes.here");
if (PackageManager.PERMISSION_GRANTED == result) {
// Do your stuff here
}
在您的广播接收器中。或者在定义接收器的 AndroidManifest.xml 中声明权限。
<reciever android:name="your.receiver.goes.here"
android:permission="your.permission.goes.here" />
【讨论】:
checkCallingPermission() 将不在 BroadcastReceiver 中工作,因为它仅适用于 Binder。
我尝试在 AppWidgetProvider 中使用 checkCallingPermission,尽管我已添加到 AndroidManifest.xml:
...
<permission android:permissionGroup="android.permission-group.PERSONAL_INFO"
android:description="@string/receiveUpdates" android:protectionLevel="normal"
android:label="@string/receiveStatusUpdates" android:name="my.prem.RCV_STATUS">
</permission>
<uses-permission android:name="my.prem.RCV_STATUS"/>
...
在我的小部件中,结果为 -1 (PackageManager.PERMISSION_DENIED)。
public void onReceive(Context context, Intent intent) {
... // check that this is the Action I've been waiting for.
int result = context.checkCallingPermission(my.prem.RCV_STATUS);
....
}
点击小部件发送一个 PendingIntent 来启动一个执行 AsyncTask 的服务,AsyncTask 的 postExecute 发送我正在等待的 Intent。
谢谢。
【讨论】: