android - list 文件中声明的电池广播接收器不起作用?

标签 android broadcastreceiver battery

有两种方法可以使广播接收器为系统所知:一种是使用此元素在 list 文件中声明它。另一种是在java代码中动态创建接收器。

现在,receiver已经在java代码中动态创建,并且可以正常工作。但是为什么第一种方式“在 list 文件中声明”失败了?

有没有成功的人?

谢谢。

AndroidManifest.xml

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

最佳答案

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

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

为什么?我认为这是因为 BATTERY_CHANGED 操作很常见,如果您可以在 list 中声明它,系统通常会发送大量广播,从而显着消耗电池;然而,当你在代码中声明它时,broadcastReceiver 只会在 Activity 运行时有效,从而避免过度的电池消耗。为了节省电量,Android 不允许在文件中注册此类操作。

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

关于android - list 文件中声明的电池广播接收器不起作用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9122964/

相关文章:

android - 与 ESP8266-01 上设置的服务器通信的 TCP 客户端

java - 为 BroadcastReceiver 调用 onReceive 时出现 NullPointerException

bash - 在 MacOS 中,当电池电量低于阈值时播放警告的脚本

android - 在 android 中以编程方式使用纵向和横向模式

android - ContentProvider 和 Binder IPC

android - 如何获取当前电池百分比?

iphone - 打开 TCP 连接且不发送或接收数据是否会影响 iPhone 电池?

android - 定时器、TimerTask 和电池消耗

android - 点击标记时如何显示气泡

android - 为什么我无法收到 POWER CONNECTED 操作?