Как проверить, есть ли у BroadCast Sender пользовательское разрешение на его отправку - PullRequest
0 голосов
/ 15 декабря 2011

У меня есть плагин для моего приложения, который запускается с BroadCast.Мне уже удалось добавить пользовательское разрешение, поэтому только приложения с разрешением могут получать трансляцию.

Однако я не знаю, как выполнить более важную часть: как я могу проверить, есть ли у отправителяпользовательское разрешение, поэтому только мое основное приложение может отправлять трансляции?

Я знаю, что это возможно, но я не знаю, как это сделать.

Спасибо!

Ответы [ 2 ]

2 голосов
/ 15 декабря 2011

Попробуйте использовать:

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 голос
/ 27 января 2012

Я пытался использовать checkCallingPermission из AppWidgetProvider, и хотя я добавил к 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, postExecute AsyncTask отправляет ожидаемое мной намерение.

Спасибо.

...