Вопрос

Если я зарегистрирую широковещательный приемник, скажем, в моей деятельности, как это,

@Override
protected void onResume() {
    super.onResume();

    myReceiver = new BroadcastReceiver() { ... };
    IntentFilter filter = new IntentFilter("com.example.MY_ACTION");
    registerReceiver(myReceiver, filter);
}
.

Это ресивер экспортируется?Если еще одно приложение транслирует com.example.MY_ACTION, будет получено myReceiver?

Если это так, я предполагаю, что мне нужно использовать форму registerReceiver(), который принимает разрешение на строку, а затем определить это разрешение в моем манифесте, придавая ему высокий уровень защиты (например, подпись).Это верно?Есть ли более проще?

спасибо.

Это было полезно?

Решение

из документов API на API BroadCastreceiver:

Если вам не нужно отправлять трансляции через приложения, рассмотрим Используя этот класс с localbroadcastmanager вместо более Общие сооружения, описанные ниже.Это даст вам гораздо больше эффективное осуществление (не требуется перекрестная связь) и позволяют избежать думать о любых вопросах безопасности, связанных с другими Приложения могут получать или отправлять ваши вещания.

Таким образом, по крайней мере, вы можете держать приемник только внутри вашего приложения.

Другие советы

Чтобы понять другие работы и для моих собственных целей архивации: да, контекстно-зарегистрированные приемники являются экспортированы по умолчанию.

Там, кажется, не так много Документация Можно быстро подтвердить это, запустив отдельное приложение, отправляющее пользовательскую трансляцию. Я проверял это на APIS 16-29, трансляция будет получена, и поэтому каждый пакет сможет отправить на ваш приемник (который может быть ошибочным недостатком).


Чтобы решить проблему без использования локальных вещаний ( Следует использоваться везде, где это возможно ) Вы находитесь на правильном пути в определении пользовательской разрешения и ограничивая трансляции к приложениям, которые запросили разрешение . Ради полноты:

Определить и использовать пользовательское разрешение в манифесте:

<permission android:name="com.example.bcrtest.BROADCAST_PERMISSION"
    android:protectionLevel="signature"/>
<uses-permission android:name="com.example.bcrtest.BROADCAST_PERMISSION" />
.

Регистрация рецепта с разрешениями:

registerReceiver(mReceiver, new IntentFilter(MY_INTENT_ACTION), "com.example.bcrtest.BROADCAST_PERMISSION", null );
.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top