2012-01-24 127 views
4

好吧,让我开始说我已经四处寻找答案这个问题。我试图找出什么是最佳实践,以及什么最适合电池寿命。这是我的情况: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

回答

6

这里是我想出了

的解决方案,我创建了一个报警,断火X秒数,我想我把它设置为90,发送一个自定义的意图。然后我发现android.intent.action.ACTION_POWER_CONNECTED和android.intent.action.ACTION_POWER_DISCONNECTED允许我检查设备是否插入或不插入。结合使用上述提及的功能,我可以检查我的电池电量以及设备是否正在充电,而无需使用已注册的接收器创建持续服务。我希望这可以帮助至少有人在那里。