监测电池电量和充电状态

监测电池电量和充电状态

当你改变你的背景更新的频率,以减少对电池寿命的影响,这些更新,检查当前电池电量和充电状态,是一个良好的开端。

进行应用程序的更新取决于电池的电量和充电状态的设备的电池寿命的影响。的设备进行更新,同时通过交流充电的影响是可以忽略不计,所以在大多数情况下,可以最大限度地发挥你的刷新率,只要设备连接到壁式充电器。相反,如果该设备是放电,减少您的更新速率,可以延长电池的使用寿命。

同样的,你也可以检查电池的充电水平,有可能减少甚至停止更新的频率,当电池电量几乎耗尽。

确定当前的充电状态


首先确定当前的充电状态。BatteryManager 广播一个棘手的 Intent ,其中包括充电状态的电池和充电的细节。

因为这是一个棘手的意图,你不需要注册一个的BroadcastReceiver通过简单地调用registerReceiver通过的接收器在未来的片段所示,当前的电池状态的意图,则返回。你可以通过在实际的BroadcastReceiver对象,但我们将在后面的章节更新的处理,所以它不是必要的。

IntentFilter ifilter = new IntentFilter(Intent.ACTION_BATTERY_CHANGED);
Intent batteryStatus = context.registerReceiver(null, ifilter);

您可以提取当前的充电状态,如果设备正在充电时,无论是通过USB或AC充电器充电:

// 充电/充电了吗?
int status = batteryStatus.getIntExtra(BatteryManager.EXTRA_STATUS, -1);
boolean isCharging = status == BatteryManager.BATTERY_STATUS_CHARGING ||
                     status == BatteryManager.BATTERY_STATUS_FULL;

// 我们如何充电?
int chargePlug = battery.getIntExtra(BatteryManager.EXTRA_PLUGGED, -1);
boolean usbCharge = chargePlug == BATTERY_PLUGGED_USB;
boolean acCharge = chargePlug == BATTERY_PLUGGED_AC;

通常情况下,你应该最大化的背景更新率的情况下,该装置被连接到交流充电器,降低的速率,如果电荷是通过USB,如果电池被放电,并进一步降低它。

监控充电状态的变化


的充电状态可以轻易改变一个设备可以插入,所以重要的是要监控充电状态的变化,并相应地改变你的刷新率。

在的BatteryManager广播的行动时,将设备连接或断开电源。重要的是要接收这些事件,即使是在你的应用程序没有运行,特别是这些事件的影响如何,往往你启动你的应用程序以启动后台更新,所以你应该在你的清单中注册的BroadcastReceiver听这两个事件定义的 ACTION_POWER_CONNECTED ACTION_POWER_DISCONNECTED的一个意图过滤器内。

<receiver android:name=".PowerConnectionReceiver">
  <intent-filter>
    <action android:name="android.intent.action.ACTION_POWER_CONNECTED"/>
    <action android:name="android.intent.action.ACTION_POWER_DISCONNECTED"/>
  </intent-filter>
</receiver>

在相关的BroadcastReceiver实现,您可以提取当前充电状态和方法,在上一步中。

public class PowerConnectionReceiver extends BroadcastReceiver {
    @Override
    public void onReceive(Context context, Intent intent) { 
        int status = intent.getIntExtra(BatteryManager.EXTRA_STATUS, -1);
        boolean isCharging = status == BatteryManager.BATTERY_STATUS_CHARGING ||
                            status == BatteryManager.BATTERY_STATUS_FULL;
    
        int chargePlug = intent.getIntExtra(BatteryManager.EXTRA_PLUGGED, -1);
        boolean usbCharge = chargePlug == BATTERY_PLUGGED_USB;
        boolean acCharge = chargePlug == BATTERY_PLUGGED_AC;
    }
}

确定当前的电池电量


在某些情况下,它也是有用的,以确定当前的电池电量。你可以选择你的背景更新率降低,如果电池电量低于一定的水平。

您可以发现,目前的电池充电,电池状态意图通过提取当前的电池电量和规模如下图所示:

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

float batteryPct = level / (float)scale;

在电池电量监控重大变化


你不能很容易地持续监控电池状态,但你并不需要。

一般来说,不断监测电池电量的影响有一个更大的冲击对电池的比你的应用程序的正常行为,所以它是很好的做法,以只监测电池电量的显着变化,特别是当该设备进入或退出一个低电池状态。

下面的代码段的清单中提取的意图过滤器元件内的广播接收器。接收器被触发,只要设备电池电量低或退出低的条件听的ACTION_BATTERY_LOWACTION_BATTERY_OKAY, 

<receiver android:name=".BatteryLevelReceiver">
<intent-filter>
  <action android:name="android.intent.action.ACTION_BATTERY_LOW"/>
  <action android:name="android.intent.action.ACTION_BATTERY_OKAY"/>
  </intent-filter>
</receiver>

这是比较好的做法是禁用所有后台更新,当电池电量严重不足。不要紧,如何新鲜的是,如果你的数据在手机自动关机,然后才可以使用它。

在许多情况下,充电的设备的行为,是一致把到船坞。下一课将告诉您如何确定当前的船坞状态和监控设备对接的变化。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值