Android系统如何以及何时发送ACTION_BATTERY_CHANGED即时贴?

Android系统如何以及何时发送ACTION_BATTERY_CHANGED即时贴?,第1张

概述我的目标是:当我调用某个函数时,我想获得确切的当前电池状态(电量,电压等).首先,我尝试在应用程序中执行此 *** 作,如website所示.然后我发现实际上ACTION_BATTERY_CHANGED广播是sticky,这意味着我从上次广播中得到的不是确切的当前值.实际上,我已经研究了android源代码.对于电池接口

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

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

实际上,我已经研究了androID源代码.对于电池接口,驱动程序具有读取电池内部寄存器的功能,其中包含电流soc(充电状态),电压等.

所以我只是想知道系统如何以及何时发送即时广播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系统如何以及何时发送ACTION_BATTERY_CHANGED即时贴?全部内容,希望文章能够帮你解决Android系统如何以及何时发送ACTION_BATTERY_CHANGED即时贴?所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/web/1086668.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-27
下一篇 2022-05-27

发表评论

登录后才能评论

评论列表(0条)

保存