凡亿教育-香香
凡事用心,一起进步
打开APP
公司名片
凡亿专栏 | Android电源管理监听充电状态的变化
课程
直播
文章
问答
类目筛选
EDA设计
硬件技术
EDA仿真
嵌入式
IC设计
人工智能
考试认证
结构设计
其他
Android电源管理监听充电状态的变化
电路之家
2017-01-01 00:00:00
2122
关注
通过检查设备当前的
电池
电量和充电状态,然后适当改变后台服务的更新频率,可以有效降低电量的消耗。所以您的应用程序的更新频率也应当根据设备当前的电池电量和充电状态来进行动态调整。通常情况下,当设备在充电的过程中,可以提高应用程序的数据更新频率,因为此时电池电量的消耗相较于充电的过程耗费很小,基本可以忽略。相反,如果电池是在正常的使用过程中,那么应当合理调整应用程序的更新频率,不能更新太频繁,这样有助于延长电池的使用寿命。同时,应用程序应当一直监视设备电量的状态变化,在设备电量不足时,尽量降低更新频率,或者干脆停止数据更新。获取当前的电池状态Bat
te
ryManager 会发送“s
ti
cky”类型的系统广播,在 Intent 中包括了当前的电池电量状态和充电状态等信息。因为电池状态的广播类型是 “sTIcky”类型的,所以我们不需要注册相应的Bro
adc
astReceiver。只需要在调用 registerReceiver 的时候传递空参数null就可以,然后函数的返回值 intent 中就包括了当前电池状态的各种信息。当然您也可以传递一个自定义的 BroadcastReceiver ,在后面的章节里面有介绍,不过实际上也是没有什么必要的。示例代码:IntentFilter
if
ilter = new IntentFilter(Intent.ACTION_BATTERY_CHANGED);Intent batteryStatus = context.registerReceiver(null, ifilter);从返回的 Intent 中我们可以获得当前的充电状态和充电类型,是通过
USB
,还是AC充电器?// Are we charging / charged?int status = batteryStatus.geTIntExtra(BatteryManager.EXTRA_STATUS, -1);boolean isCharging = status == BatteryManager.BATTERY_STATUS_CHARGING ||status == BatteryManager.BATTERY_STATUS_FULL;// How are we charging?int chargePlug = battery.geTIntExtra(BatteryManager.EXTRA_PLUGGED, -1);boolean usbCharge = chargePlug == BATTERY_PLUGGED_USB;boolean acCharge = chargePlug == BATTERY_PLUGGED_AC;通常情况下,在AC充电器的情况下,您可以最大化应用程序的更新频率,如果是在USB充电的状态下,适当降低更新频率,而如果是在非充电的时候,您应当将更新频率降到最低的情况,以合理利用电量。监听充电状态的变化作为便携式的插入充电设备,充电和非充电的状态切换有可能非常频繁,所以您的应用程序应该监测这种状态的切换,并随时调整应用程序的刷新频率。当设备与电源连接充电的时候,或者与充电电源断开的时候,系统的 BatteryManager 都会发送一个广播。您在应用程序中应当注册和监听这种系统广播,即使您的应用程序当前没有在运行,如果这些状态切换会影响您应用程序的后台服务的更新频率,您就应该注册 一个 BroadcastReceiver 来监听这两个事件,分别为 ACTION_POWER_CONNECTED 和 ACTION_POWER_DISCONNECTED示例代码:《receiver
android
:name=“.PowerConnectionReceiver”》《intent-filter》《action android:name=“android.intent.action.ACTION_POWER_CONNECTED”/》《action android:name=“android.intent.action.ACTION_POWER_DISCONNECTED”/》《/intent-filter》《/receiver》在 BatteryManager 中Receiver的实现代码中,您可以获得当前电池的状态信息,这在上文已经提及。示例代码:public class PowerConnectionReceiver extends BroadcastReceiver {@Overridepublic void onReceive(Context context, Intent intent) {int status = intent.getIntExtra(BatteryManager.EXTRA_STATUS, -1);boolean isCharging = status == BatteryManager.BATTERY_STATUS_CHARGING ||status == BatteryManager.BATTERY_STATUS_FULL;int chargePlug = intent.getIntExtra(BatteryManager.EXTRA_PLUGGED, -1);boolean usbCharge = chargePlug == BATTERY_PLUGGED_USB;boolean acCharge = chargePlug == BATTERY_PLUGGED_AC;}}获得当前的电池电量等级很多时候需要获取当前的电量等级,当电池电量低于某一个级别的时候,您的应用程序应当降低后台服务的更新频率来尽量减小电量的消耗,您可以通过上文获取到的Intent来取得当前电量的Level和Scale,进而可以算出当前电量的百分比。示例代码:int level = battery.getIntExtra(BatteryManager.EXTRA_LEVEL, -1);int scale = battery.getIntExtra(BatteryManager.EXTRA_SCALE, -1);float batteryPct = level / (float)scale;监测电池电量的显着变化通常来说,我们没有必要一直持续的监听电池的状态变化,主要集中关注于电池电量在 “low battery state” 附近的变换即可,示例代码展示了监听电池电量在“low battery state” 状态的变化,分为为进入低电量状态和返回到电池电量正常的状态。对应的 Action分别为 ACTION_BATTERY_LOW 和 ACTION_BATTERY_OKAY 。《receiver android:name=“.BatteryLevelReceiver”》《intent-filter》《action android:name=“android.intent.action.ACTION_BATTERY_LOW”/》《action android:name=“android.intent.action.ACTION_BATTERY_OKAY”/》《/intent-filter》《/receiver》比较好的解决方案是:当电池的电量非常低的时候,禁用所有程序的后台更新服务,如果手机因为电量不足自动关机,那么这个时候的最新数据也基本没有什么作用。通常当把Android设备放入一个Dock(设备底座)中就进入了充电状态。
登录查看更多内容
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表凡亿课堂立场。文章及其配图仅供工程师学习之用,如有内容图片侵权或者其他问题,请联系本站作侵删。
相关阅读
电路之家
已关注
开关电源的电路基本组成和分类
开关电源的电路基本组成和分类-各种事物都有规律,而不同类型的开关电源在电路上总体来说都有相同的地方。之前民熔小课堂多少也提到了部分类型的开关电源的部分电路,而开关电源的电路基本组成是怎样的呢?下面小课堂就来谈谈这个点以及分享开关电源的部分分类。
2017-01-01 00:00:00
文章
电路之家
已关注
未来短期内燃料电池汽车的成本有可能降低70%至80%
未来短期内燃料电池汽车的成本有可能降低70%至80%-中国产业促进会氢能分会从海外媒体获悉,在当地时间9月9日-10日举行的2020年加拿大氢能源电池展“f-cellHFC”上,加拿大自然科学与工程研究委员会(NSERC)主席Alejandro Adem指出,“历经多年的技术进步,氢能产业正迎来全球的瞩目。在过去十年里,氢燃料电池技术已经取得突破,氢燃料电池技术发展的热度有了极大的提高。”
2017-01-01 00:00:00
文章
电路之家
已关注
一场有关近20万吨报废电池的革命或将到来
一场有关近20万吨报废电池的革命或将到来-2019年中国汽车技术研究中心综合曾预测,在2020年前后,我国纯电动(含插电式)乘用车和混合动力乘用车电池累计报废量将达12-17万吨。很显然,如今的电池报废量远远高出预测。
2017-01-01 00:00:00
文章
电路之家
已关注
当特斯拉“秘密电池”再度爽约,国产电池厂商将迎来机遇和更大压力
当特斯拉“秘密电池”再度爽约,国产电池厂商将迎来机遇和更大压力-拖了半年后,特斯拉的“电池大会”终于在日前召开。虽然在此次大会上,马斯克介绍了特斯拉诸多亮眼的技术,但令人遗憾的是,此前马斯克预热很久的续航100万英里的电池并没有亮相,转身开始讲述“每千瓦电池生产成本降低56%,让更多人开得起特斯拉”的宏大愿景,这也使得大会结束后,特斯拉股价下跌了5%。
2017-01-01 00:00:00
文章
电路之家
已关注
常用三大检波技术介绍 电压半波整流的均值检波电路分析
当输入处于正半周时,二极管D1导通,向电容C充电,微安表得到的是经电容平滑滤波之后的直流电,当输入处于负半周时,电流从D2流过,二极管D1截止,电容电荷通过微安表内阻放电,电容电压下降。
2017-01-01 00:00:00
文章
进入分区查看更多精彩内容>
精彩评论
暂无评论
发布
暂无评论