清单文件中声明的电池广播接收器无法工作?

6

有两种方法可以让广播接收器被系统识别:一种是在清单文件中使用该元素声明它,另一种是在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个回答

5
对于某些操作,你只能在Java代码中声明BroadcastReceiver。目前我知道的是 BATTERY_CHANGEDSCREEN_ONSCREEN_OFF
当你在Manifest.xml文件中声明BroadcastReceiver时,不管你的应用程序是否正在运行,BroadcastReceiver都会被唤醒,因此 onReceive 方法将被调用。
为什么呢?我认为这是因为 BATTERY_CHANGED 很常见且经常发生,如果你可以在Manifest中声明它,系统就会频繁发送广播,从而极大地消耗电量;然而,当你在代码中声明它时,BroadcastReceiver只有在活动运行时才有效,从而避免极端的电池消耗。为了节省电量,Android不允许将此类操作注册在文件中。
这只是我的猜测。我没有看到任何官方解释。作为开发者,我只是记住这些操作,而不是它们背后的原因。

1
哦...我想知道“为什么”。谢谢回复! - Sodino

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接