Android 2.0检查电池电量/充电的最佳方法?

时间:2012-01-24 15:12:36

标签: android service broadcastreceiver battery

好吧,让我开始说我已经四处寻找这个问题的答案了。我想弄清楚什么是最佳做法以及最适合电池续航时间。这是我的情况:

我希望我的应用程序在设备达到某个用户定义的电池级别时暂停其活动,而不必使用Intent.ACTION_BATTERY_LOW和Intent.ACTION_BATTERY_OKAY。我在很多程序中都看到了这个选项,并希望用我的应用程序来模拟它。

据我所知,Intent.ACTION_BATTERY_CHANGED必须是注册事件。您不能在清单中声明它以使BroadcastReceiver获取该接收器以获取Intent。我知道如何编码如何获得电池电量/电平,看看设备是通过USB还是AC充电

我目前的思考过程给我带来了两个选择,我无法找出哪个是最佳选择,或者是否有其他选项我不知道?也许有人可以帮助我找出帮助我的选项的优缺点?

选项1:使用AlarmManager创建重复警报,以便经常轮询设备以检查电池电量。因此,当我的警报触发时,它将为我的清单注册接收器发送一个自定义Intent来检查电池电量。
PRO没有后台服务可能会被杀死或耗尽电池寿命。
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

1 个答案:

答案 0 :(得分:6)

这是我提出的解决方案

我创建了一个警报来触发X秒,我想我将其设置为90,以发送自定义Intent。然后我发现android.intent.action.ACTION_POWER_CONNECTED和android.intent.action.ACTION_POWER_DISCONNECTED允许我检查设备是否已插入。使用上述功能的组合,我能够检查我的电池电量以及设备是否正在充电而无需使用已注册的接收器创建恒定服务。我希望这对至少有人有帮助。