2011-12-15 3 views
0

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

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

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

Спасибо!

ответ

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

Отлично, именно то, что я искал! :) – Force

+1

AFAIK 'checkCallingPermission()' будет ** НЕ ** работать с 'BroadcastReceiver', потому что он предназначен для использования только в' Binder'. – DavisNT

1

Я попытался с помощью 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 отправляет Intent я жду.

Спасибо.

 Смежные вопросы

  • Нет связанных вопросов^_^