如何检查BroadCast发件人是否具有发送它的自定义权限

时间:2011-12-15 14:49:39

标签: android permissions broadcastreceiver broadcast

我的应用程序插件是以BroadCast开头的。我已设法添加自定义权限,因此只有拥有该权限的应用才能接收广播。

但是,我不知道如何实现更重要的部分:如果发件人具有自定义权限,我该如何检查,以便只有我的主应用程序可以发送广播?

我知道这是可能的,但我不知道该怎么做。

谢谢!

2 个答案:

答案 0 :(得分:2)

尝试使用:

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" />

答案 1 :(得分:1)

我已尝试在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。

感谢。