清单文件中声明的电池广播接收器不起作用?

时间:2012-02-03 02:33:02

标签: android broadcastreceiver battery

有两种方法可以使系统知道广播接收器:一种方法使用此元素在清单文件中声明它。另一种是在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 个答案:

答案 0 :(得分:4)

对于某些操作,您只能在Java代码中声明BroadcastReceiver。据我所知,BATTERY_CHANGED操作和SCREEN_ONSCREEN_OFF会发生这种情况。

当您在Manifest.xml文件中声明BroadcastReceiver时,无论您的应用程序是否正在运行,BroadcastReceiver都将被唤醒,因此将调用onReceive方法。

为什么?我认为这是因为BATTERY_CHANGED动作非常常见,如果您可以在Manifest中声明它,系统通常会发送大量广播,从而大大消耗电池;但是,当您在代码中声明它时,broadcastReceiver仅在活动运行时才有效,从而避免极端的电池消耗。为节省电量,Android不允许在文件中注册此类操作。

这只是我的猜测。我没有看到任何官方解释。作为开发人员,我只是记住这些行为,而不是背后的原因。