0

我们有一个 Android 应用程序,它必须安装在选项卡中的客户端位置,并且必须为选项卡充电并连续运行,而不会关闭选项卡,这会导致电池健康状况下降。所以我们必须在我们的应用程序中实现一个解决方案,即使充电器是物理连接的,用户也可以设置一些充电限制来控制。

(例如:如果我将 80% 设置为上限,20% 设置为下限,则标签应在达到 80% 时停止充电,并在达到 20% 时自动开始充电)。

有人可以告诉我有没有办法做到这一点。

提前致谢。

4

1 回答 1

0

您可能需要在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;
            }
        }
    }
}
于 2021-09-06T07:53:34.713 回答