原文:https://source.android.com/devices/tech/power/batteryless
此页面描述了Android如何处理具有可拆卸电池或无内置电池的产品。后一种设备可以连接到一个外部电源,如另一设备上的AC电源插座或USB端口。
电池是否存在?
应用程序可以使用以下代码来检测设备当前是否有电池:
final Intent batteryInfo = registerReceiver(null, new
IntentFilter(Intent.ACTION_BATTERY_CHANGED));
return batteryInfo.getBooleanExtra(BatteryManager.EXTRA_PRESENT, true);
无电池设备行为
如果Android未检测到产品的电池设备,则会使用以下与电池相关的默认值。
注意,Android 9版本中的默认值已更改。此表显示了差异。
电池状态 | Android 9及更高版本 | Android 8.1及更低版本 |
---|---|---|
Present | false | true |
Status | unknown | charging |
Remaining capacity | 0 | 100% |
Health | unknown | good |
AC charger online status | not modified | forced to true |
制造商可以使用内核驱动程序power_supply 或Health HAL更改默认设置 。
Android 9及更高版本
Android 9删除了一些以前的无电池设备代码:默认假设电池存在,充电率为100%,并且热敏电阻的正常温度读数状况良好。
处理此信息的大部分Framework API继续处理与以前相同的常见情况:系统将被视为正在 充电(即,不使用电池供电),并且不会被视为电池电量不足。如果用户界面绘制电池图标,它将显示一个感叹号,电池百分比将显示为0%。但设备不会因电池电量不足而关闭,且需要充电或电池电量良好的作业仍会被安排。
Android 8.1及更低版本
由于电池状态未知,Android Framework API将认为系统正在充电(或者不使用电池供电)并且不会被视为电池电量不足。如果用户界面呈现电池图标,则会显示感叹号,电池百分比将显示为0%。但设备不会因电池电量不足而关闭,且需要充电或电池电量良好的作业仍会被安排。
实现
Android 9默认代码可能适用于您的设备,但建议进行内核或HAL更改,以准确反映产品的电源和电池状态,如上所述。如果Android 9及更高版本未检测到一个Linux电源支持类 的充电设备,则默认所有充电类型(AC,USB,无线)都将处于离线状态。如果所有充电器都处于离线状态但没有检测到电池设备,则系统仍将被视为正在充电,因为它在外部运行,无电池供电,如前所述。
如果您的产品没有电池且始终连接到电源,则最好为AC或USB电源实现一个Linux内核power_supply
类充电驱动程序, 将其在线属性sysfs
设置为true
。或者,您可以在设备的Health HAL中配置AC充电器的在线属性。实现Health HAL详见Health 2.0实现。
此Health HAL的客制化实现了一个Health::getHealthInfo()
的自定义版本,修改了BatteryProperties.chargerAcOnline = true
的值。
首先,将 hardware/interfaces/health/2.0/default/Health.cpp
文件复制到您自己的Health HAL实现里,并根据Health 2.0 README进行修改。
网友评论