我们有一个 Android 应用程序,它必须安装在选项卡中的客户端位置,并且必须为选项卡充电并连续运行,而不会关闭选项卡,这会导致电池健康状况下降。所以我们必须在我们的应用程序中实现一个解决方案,即使充电器是物理连接的,用户也可以设置一些充电限制来控制。
(例如:如果我将 80% 设置为上限,20% 设置为下限,则标签应在达到 80% 时停止充电,并在达到 20% 时自动开始充电)。
有人可以告诉我有没有办法做到这一点。
提前致谢。
我们有一个 Android 应用程序,它必须安装在选项卡中的客户端位置,并且必须为选项卡充电并连续运行,而不会关闭选项卡,这会导致电池健康状况下降。所以我们必须在我们的应用程序中实现一个解决方案,即使充电器是物理连接的,用户也可以设置一些充电限制来控制。
(例如:如果我将 80% 设置为上限,20% 设置为下限,则标签应在达到 80% 时停止充电,并在达到 20% 时自动开始充电)。
有人可以告诉我有没有办法做到这一点。
提前致谢。
您可能需要在BroadcastReceiver上使用带有意图过滤器的BroadCastReceiver尝试通过 BatteryManager 获取电池电量:
public class MyPowerMonitorReceiver extends BroadcastReceiver {
private float currentBatteryLevel;
@Override
public void onReceive(Context context, Intent intent) {
switch (action) {
case (Intent.ACTION_BATTERY_CHANGED): {
Log.i(TAG, "Battery has changed");
int level = intent.getIntExtra(BatteryManager.EXTRA_LEVEL, -1);
int scale = intent.getIntExtra(BatteryManager.EXTRA_SCALE, -1);
currentBatteryLevel = (level * 100) / (float) scale;
Toast.makeText(context, "Current battery level: " + Float.toString(currentBatteryLevel) + "%" + " level: " + level + " scale: " + scale, Toast.LENGTH_LONG).show();
break;
}
case (Intent.ACTION_POWER_CONNECTED): {
Log.i(TAG, "Power connected");
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 == BatteryManager.BATTERY_PLUGGED_USB;
boolean acCharge = chargePlug == BatteryManager.BATTERY_PLUGGED_AC;
String chargingType = null;
if (usbCharge) {
chargingType = "USB";
} else if (acCharge) {
chargingType = "AC Power";
}
if (isCharging && chargingType != null) {
Toast.makeText(context, "Device is charging via: " + chargingType, Toast.LENGTH_SHORT).show();
} else {
Toast.makeText(context, "Device is charging.", Toast.LENGTH_SHORT).show();
}
break;
}
case (Intent.ACTION_POWER_DISCONNECTED): {
Log.i(TAG, "Power disconnected");
Toast.makeText(context, "Power Disconnected", Toast.LENGTH_SHORT).show();
break;
}
case (Intent.ACTION_BATTERY_LOW): {
Log.i(TAG, "Battery low");
Toast.makeText(context, "Battery low", Toast.LENGTH_SHORT).show();
break;
}
case (Intent.ACTION_BATTERY_OKAY): {
Log.i(TAG, "Battery Okay");
Toast.makeText(context, "Battery Okay", Toast.LENGTH_SHORT).show();
break;
}
}
}
}