Батарея вещательного приемника, заявленная в файле манифеста, не работает? - PullRequest
5 голосов
/ 03 февраля 2012

Существует два способа сделать широковещательный приемник известным системе: один объявляет его в файле манифеста с этим элементом. Другой - динамически создавать получатель в коде Java.

Теперь получатель был создан динамически в Java-коде, и он работает нормально. Но почему не удался первый способ «Объявление в файле манифеста»?

Есть ли кто-нибудь к успеху?

Спасибо.

AndroidManifest.xml

<receiver android:name="pj.batteryinfo.BatteryReceiver">
    <intent-filter>
        <action android:name="android.intent.action.BATTERY_CHANGED"></action>
    </intent-filter>
</receiver>

1 Ответ

4 голосов
/ 03 февраля 2012

Для некоторых действий вы можете объявить BroadcastReceiver только в коде Java. Насколько мне известно, это происходит с действием BATTERY_CHANGED и SCREEN_ON, SCREEN_OFF.

Когда вы объявляете BroadcastReceiver в файле Manifest.xml, независимо от того, запущено ваше приложение или нет, BroadcastReceiver будет активирован и, следовательно, будет вызван метод onReceive.

Почему? Я думаю, это потому, что действие BATTERY_CHANGED очень распространено, и если вы можете объявить его в Манифесте, система часто отправляет много трансляций и, таким образом, сильно расходует батарею, однако, когда вы Если в коде указано это, то широковещательный приемник будет эффективен только во время работы, что позволит избежать чрезмерного расхода батареи. Для экономии заряда аккумулятора Android не позволяет регистрировать такие действия в файле.

Это только мое предположение. Я не видел никаких официальных объяснений по этому поводу. Как разработчик, я просто запоминаю такие действия, а не их причины.

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