-3

我注册接收ACTION_BATTERY_LOWACTION_BATTERY_OKAY在一个活动中,并据此改变一些行为。

但我想知道活动开始时的初始状态。目前我使用以下代码进行操作:

Intent intent = registerReceiver(null, new IntentFilter(Intent.ACTION_BATTERY_CHANGED));
int status = intent.getIntExtra(BatteryManager.EXTRA_STATUS, -1);
int level = intent.getIntExtra(BatteryManager.EXTRA_LEVEL, 100);
int scale = intent.getIntExtra(BatteryManager.EXTRA_SCALE, 100);
boolean batteryLow = 
    (status == BatteryManager.BATTERY_STATUS_DISCHARGING 
           || status == BatteryManager.BATTERY_STATUS_NOT_CHARGING)
    && level * 100 / scale < 15;

这段代码既过于冗长,也可能与 android 认为的低级不同。status==discharging例如,当我向 telnet 发出“power ac off”命令时,模拟器不报告。我也必须发出“电源状态放电”。不确定真实设备。

还有其他方法吗?

4

2 回答 2

-1

正如我发现的那样,问题中的代码是最简单的代码。警告显示在 15% 的电池电量,并且此值无法通过公共 API 获得。当屏幕变暗时,还有另一个 10% 的水平。这些值是在构建时定义的,可能某些制造商或 android 版本会更改它。

另请参阅此答案

于 2014-06-04T12:34:21.647 回答
-1

这就是我能做到的尽可能详细

int level = batteryStatus.getIntExtra(BatteryManager.EXTRA_LEVEL, -1);
int scale = batteryStatus.getIntExtra(BatteryManager.EXTRA_SCALE, -1);

return BatteryManager.BATTERY_STATUS_DISCHARGING && level / (float)scale < 15;
于 2014-06-04T07:05:39.880 回答