我的目标是:当我调用某些函数时,我想获得准确的当前电池状态(电量、电压等)。
首先,我尝试在我的应用程序中执行此操作,如 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/