【问题标题】:How to check if a BroadCast Sender has a custom permission to send it如何检查广​​播发件人是否具有发送它的自定义权限
【发布时间】:2011-12-15 14:49:39
【问题描述】:

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

但是,我不知道如何实现更重要的部分:我如何检查,如果发送者有自定义权限,那么只有我的主应用可以发送广播?

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

谢谢!

【问题讨论】:

    标签: android permissions broadcastreceiver broadcast


    【解决方案1】:

    尝试使用:

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

    【讨论】:

    • 完美,正是我想要的! :)
    • AFAIK checkCallingPermission()BroadcastReceiver 中工作,因为它仅适用于 Binder
    【解决方案2】:

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

    谢谢。

    【讨论】:

      猜你喜欢
      • 2021-08-11
      • 2016-09-04
      • 2020-11-05
      • 1970-01-01
      • 2017-12-22
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-03-24
      相关资源
      最近更新 更多