2014-08-29 3 views
1

Я пытаюсь настроить динамический широковещательный приемник внутри моей службы для приема трансляций из другого приложения. Твист: я хочу, чтобы вещатель имел определенные разрешения.Как зарегистрировать динамический BroadcastReceiver с разрешениями?

В файле AndroidManifest приложения-службы я создал разрешение с использованием нормального уровня защиты. Приложение, которое будет транслироваться, использует вышеупомянутое разрешение. Broadcast передается следующим образом:

Intent intent = new Intent(); 
intent.setAction(Utils.ACTION_SEND_BUS_MESSAGE); 
intent.putExtra(BusMessage.class.getSimpleName(), msg); 
sendBroadcast(intent, Utils.PERMISSION_SEND_MESSAGE); 

А получателя услуг является зарегистрируйся:

registerReceiver(receiver, receiver.getIntentFilter(), Utils.PERMISSION_SEND_MESSAGE, null); 

К сожалению вещает не поступают в приемник. Удаление разрешения от sendBroadcast и registerReceiver позволяет получать широковещательные сообщения.

Я также тестировал вещатель, чтобы удостовериться, что предоставлено необходимое разрешение.

ответ

0

Извините, я хочу, чтобы вещательная компания имела определенные разрешения.

Однако, вы написали больше, чем в своем коде.

Broadcast посылается следующим образом:

В коде, вы используете sendBroadcast(intent, Utils.PERMISSION_SEND_MESSAGE). Цитирование the documentation for that flavor of sendBroadcast() (с акцентом на добавленную стоимость):

Строка наименования разрешение, которое приемник должен держать, чтобы получить трансляцию.

Вашего sendBroadcast() требует приемника, чтобы вместить все Utils.PERMISSION_SEND_MESSAGE есть, и, видимо, это не так.

+0

Не регистрируетReceiver установленное разрешение для приемника с использованием третьего аргумента? registerReceiver (приемник BroadcastReceiver, фильтр IntentFilter, String broadcastPermission, планировщик обработчиков) –

+1

@ jM2.me: Здесь вы говорите, что отправитель должен иметь разрешение. Просто избавитесь от второго параметра 'sendBroadcast()', чтобы решить вашу проблему. – CommonsWare

+0

Я, наверное, усложнил ситуацию, но цель заключалась в том, чтобы приемник принимал широковещательные передачи от приложений, содержащих Utils.PERMISSION_SEND_MESSAGE, и для вещателя для отправки широковещательных сообщений получателям, которые также содержат Utils.PERMISSION_SEND_MESSAGE. Ваш комментарий заставил меня понять, что пользовательские разрешения были объявлены, но используются только в приложении вещателя. Все, что мне нужно было сделать, это использовать такое же разрешение в приложении-получателе. –

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