Я пытаюсь настроить динамический широковещательный приемник внутри моей службы для приема трансляций из другого приложения. Твист: я хочу, чтобы вещатель имел определенные разрешения.Как зарегистрировать динамический 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 позволяет получать широковещательные сообщения.
Я также тестировал вещатель, чтобы удостовериться, что предоставлено необходимое разрешение.
Не регистрируетReceiver установленное разрешение для приемника с использованием третьего аргумента? registerReceiver (приемник BroadcastReceiver, фильтр IntentFilter, String broadcastPermission, планировщик обработчиков) –
@ jM2.me: Здесь вы говорите, что отправитель должен иметь разрешение. Просто избавитесь от второго параметра 'sendBroadcast()', чтобы решить вашу проблему. – CommonsWare
Я, наверное, усложнил ситуацию, но цель заключалась в том, чтобы приемник принимал широковещательные передачи от приложений, содержащих Utils.PERMISSION_SEND_MESSAGE, и для вещателя для отправки широковещательных сообщений получателям, которые также содержат Utils.PERMISSION_SEND_MESSAGE. Ваш комментарий заставил меня понять, что пользовательские разрешения были объявлены, но используются только в приложении вещателя. Все, что мне нужно было сделать, это использовать такое же разрешение в приложении-получателе. –