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

Hav*_*voc 5 service android battery broadcastreceiver

好吧,首先让我说我一直在寻找这个问题的答案.我想弄清楚什么是最佳做法以及最适合电池续航时间.这是我的情况:

我希望我的应用程序在设备达到某个用户定义的电池级别时暂停其活动,而不必使用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将耗尽处理时间和电池寿命,以保持检测



电池电量:

在广播接收器响应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;
Run Code Online (Sandbox Code Playgroud)



正在充电:

android USB连接充电信号

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;
}
Run Code Online (Sandbox Code Playgroud)

}


在此先感谢
-H

Hav*_*voc 6

这是我提出的解决方案

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