android - Android系统如何以及何时发送ACTION_BATTERY_CHANGED粘性广播?

标签 android android-intent battery

我的目标是:当我调用某些函数时,我想获得准确的当前电池状态(电量、电压等)。

首先,我尝试在我的应用程序中执行此操作,如 website 中所示.然后我发现实际上 ACTION_BATTERY_CHANGED 广播是 sticky这意味着我得到的是上次广播的值,而不是确切的当前值。

其实我已经看过android源代码了。对于电池接口(interface),驱动有读取电池内部寄存器的功能,包括当前soc(state of charge)、电压等。

所以我只是想知道系统如何以及何时发送粘性广播 ACTION_BATTERY_CHANGED?它是否定期发送(例如,每 10 秒它会读取电池中的寄存器并发送广播)?或者它是否根据其他标准(例如,soc 的变化、电压?但是电压会以 mV 为单位变化得如此频繁)发送?

为了实现我的目标,一个麻烦的方法是实现一个系统调用来调用驱动程序函数,然后重新编译 NDK 以使其在我的应用程序代码中可用。但我只想知道考虑到我上面提到的,我是否可以直接通过 ACTION_BATTERY_CHANGED 广播来做到这一点?重新注册广播有什么影响吗?

最佳答案

只需为电池电量注册广播接收器。您将在 onReceive 中获得电池电量的结果。

private void batteryLevel() {
         BroadcastReceiver batteryLevelReceiver = new BroadcastReceiver() {
                   public void onReceive(Context context, Intent intent) {
                                context.unregisterReceiver(this);
                                int rawlevel = intent.getIntExtra("level", -1);
                                int scale = intent.getIntExtra("scale", -1);
                                int level = -1;
                                if (rawlevel >= 0 && scale > 0) {
                                                   level = (rawlevel * 100) / scale;
                                }
         batterLevel.setText("Battery Level Remaining: " + level + "%");
     }
    };
IntentFilter batteryLevelFilter = new IntentFilter(Intent.ACTION_BATTERY_CHANGED);
registerReceiver(batteryLevelReceiver, batteryLevelFilter);
}

希望对您有所帮助。

关于android - Android系统如何以及何时发送ACTION_BATTERY_CHANGED粘性广播?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17079438/

相关文章:

android - 单击 baloonOverlay 时 Mapview 启动新 Activity

Android TextChangedListener 和 OnKeyListener 干扰

java - Android Studio 从共享 Intent 发送文本

java - 尝试使用 URI 构建器构建的 url 执行 get 请求

android - 同一字段有两种不同类型给 Retrofit 2 的 Gson 转换器带来麻烦

android - 使用 Intent 将数据从一个 Activity 传输到另一个 Activity

java - 将字符串从一个类发送到一个 Activity

android - 没有更新电池优化时不渲染 - libgdx

ubuntu - 在 100% 时停止为电池充电,反之亦然

Android:即使在停用 GPS 位置提供程序后,电池统计信息也会显示使用情况