Android: может ли изменение атрибутов BroadcastReceiver в манифесте помешать ему получать широковещательные сообщения при обновлении приложения пользователями? - PullRequest
0 голосов
/ 18 мая 2018

Изначально в моем приложении я настроил этот приемник в манифесте:

<receiver android:name = ".BootReceiver" 
    android:exported = "false">
    <intent-filter>
        <action android:name="android.intent.action.BOOT_COMPLETED" />
    </intent-filter>
</receiver>

Однако в новом обновлении я удалил атрибут android:exported = "false", и, судя по аналитике, произошел большой спад BootReceiver звонков.Может ли изменение атрибутов в обновленном приложении привести к тому, что BootReceiver больше не будет запускаться?

Ответы [ 3 ]

0 голосов
/ 18 мая 2018

android:exported = "false" указывает, что единственные сообщения, которые может принимать получатель широковещательной рассылки, - это сообщения, отправленные компонентами одного и того же приложения или приложений с одинаковым идентификатором пользователя.

ОС не сможет запустить ваш BootReceiver если вы установили экспортированный в false.Вследствие этого он не срабатывает.

Примечание:

Если имеется хотя бы один фильтр, это означает, что приемник вещания предназначен для приема намерений, передаваемых системой.или другие приложения, поэтому по умолчанию используется значение «true».

Избегайте android:exported = "false" продолжения приема широковещательной передачи

0 голосов
/ 18 мая 2018

Из документа:

Может ли приемник вещания принимать сообщения из источников вне его приложения - "истина", если он может, и "ложь", если нет.Если установлено значение «ложь», единственные сообщения, которые может принимать получатель широковещательной рассылки, - это сообщения, отправленные компонентами одного и того же приложения или приложений с одинаковым идентификатором пользователя.Значение по умолчанию зависит от того, содержит ли широковещательный приемник фильтры намерений.Отсутствие каких-либо фильтров означает, что он может быть вызван только объектами Intent, которые указывают его точное имя класса.Это подразумевает, что получатель предназначен только для внутреннего использования приложения (поскольку другие обычно не знают имя класса).Так что в этом случае значением по умолчанию является «ложь».С другой стороны, наличие хотя бы одного фильтра означает, что приемник широковещания предназначен для приема намерений, транслируемых системой или другими приложениями, поэтому значением по умолчанию является «true».

Означает, что еслиЗатем вы удаляете атрибут, поскольку у вас есть фильтр намерений, поэтому по умолчанию он будет иметь значение true.

0 голосов
/ 18 мая 2018

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...