好吧,让我开始说我已经四处寻找答案这个问题。我试图找出什么是最佳实践,以及什么最适合电池寿命。这是我的情况:Android 2.0检查电池电量/充电的最佳方法?
我想我的应用程序暂停其活动,当设备达到一定的用户定义的电池级别,而不必使用Intent.ACTION_BATTERY_LOW和Intent.ACTION_BATTERY_OKAY。我在很多程序中看到了这个选项,并希望用我的应用程序来模拟它。
我知道Intent.ACTION_BATTERY_CHANGED必须是注册事件。你不能仅仅在BroadcastReceiver的清单中声明它来让接收者获得Intent。我知道如何编码如何获得电池电量/电量,并查看设备是通过USB还是交流充电
我目前的思维过程给我带来了2个选择,我找不到哪个是最好的选择,或者如果有另一个选项,我不知道?也许有人可以帮助我选择帮助我的优点和缺点?
选项1:使用AlarmManager创建重复警报,基本上每隔一段时间轮询设备以检查电池电量。所以,当我的报警触发时,它会发送一个自定义的意图,我的清单注册接收器检查电池电量。
专业没有后台服务运行,可能会被杀死或吃掉电池寿命。
CON没有实时检测到从充电源插入/拔出设备,并且不得不依靠下一个触发的警报来检测变化。
选项2:创建为Intent.ACTION_BATTERY_CHANGED注册接收器的服务,所以当它是由系统广播它不仅会让电池电量,但会检测充电的实时变化。
PRO实时检测电池寿命变化和充电方法的变化。
CON恒定的服务运行可能会丧命
CON会吃了加工时间和电池寿命,以保持检测去
电池电量:
Get battery level before broadcast receiver responds for Intent.ACTION_BATTERY_CHANGED
Intent batteryIntent = context.getApplicationContext().registerReceiver(null,
new IntentFilter(Intent.ACTION_BATTERY_CHANGED));
int rawlevel = batteryIntent.getIntExtra("level", -1);
double scale = batteryIntent.getIntExtra("scale", -1);
double level = -1;
if (rawlevel >= 0 && scale > 0) {
level = rawlevel/scale;
插入/充电:
android USB connection charging signals
public static boolean isConnected(Context context) {
Intent intent = context.registerReceiver(null, new IntentFilter(Intent.ACTION_BATTERY_CHANGED));
int plugged = intent.getIntExtra(BatteryManager.EXTRA_PLUGGED, -1);
return plugged == BatteryManager.BATTERY_PLUGGED_AC || plugged == BatteryManager.BATTERY_PLUGGED_USB;
}
}
预先感谢
-H