监控电池电量和充电状态
如果您要通过改变后台更新的频率降低这些更新对电池续航时间的影响,最好先从检查当前电池电量和充电状态入手。
执行应用更新对电池续航时间的影响取决于设备的电池电量和充电状态。设备通过交流电源充电时执行更新的影响可以忽略不计,因此在大多数情况下,只要设备连接到壁式充电器,您就可以最大限度地提高更新频率。相反,如果设备正在放电,降低更新频率有助于延长电池续航时间。
同理,您也可以检查电池充电电量,并在电池电量近乎耗尽时降低更新频率,甚至停止更新。
Android电量和插拔电源状态广播监听
Android电量广播状态有3种,电量低,电量充满,电量发生改变。
Action是:
Intent.ACTION_BATTERY_CHANGE
Intent.ACTION_BATTERY_LOW
Intent.ACTION_BATTERY_OKAY
Android的插拔电源广播的Action是:
Intent.ACTION_POWER_CONNECTED
Intent.ACTION_POWER_DISCONNECTED
示例代码:
package cn.com.mdj.robot.power;
import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
import android.content.IntentFilter;
import android.util.Log;
//监测充电状态
public class BatteryListener {
private Context mContext;
private BatteryBroadcastReceiver receiver;
private BatteryStateListener mBatteryStateListener;
public BatteryListener(Context context) {
mContext = context;
receiver = new BatteryBroadcastReceiver();
}
public void register(BatteryStateListener listener) {
mBatteryStateListener = listener;
if (receiver != null) {
IntentFilter filter = new IntentFilter();
filter.addAction(Intent.ACTION_BATTERY_CHANGED);
filter.addAction(Intent.ACTION_BATTERY_LOW);
filter.addAction(Intent.ACTION_BATTERY_OKAY);
filter.addAction(Intent.ACTION_POWER_CONNECTED);
filter.addAction(Intent.ACTION_POWER_DISCONNECTED);
mContext.registerReceiver(receiver, filter);
}
}
public void unregister() {
if (receiver != null) {
mContext.unregisterReceiver(receiver);
}
}
private class BatteryBroadcastReceiver extends BroadcastReceiver {
@Override
public void onReceive(Context context, Intent intent) {
if (intent != null) {
String acyion = intent.getAction();
switch (acyion) {
case Intent.ACTION_BATTERY_CHANGED://电量发生改变
if (mBatteryStateListener != null) {
Log.e("zhang", "BatteryBroadcastReceiver --> onReceive--> ACTION_BATTERY_CHANGED");
mBatteryStateListener.onStateChanged();
}
break;
case Intent.ACTION_BATTERY_LOW://电量低
if (mBatteryStateListener != null) {
Log.e("fjasmin", "BatteryBroadcastReceiver --> onReceive--> ACTION_BATTERY_LOW");
mBatteryStateListener.onStateLow();
}
break;
case Intent.ACTION_BATTERY_OKAY://电量充满
if (mBatteryStateListener != null) {
Log.e("fjasmin", "BatteryBroadcastReceiver --> onReceive--> ACTION_BATTERY_OKAY");
mBatteryStateListener.onStateOkay();
}
break;
case Intent.ACTION_POWER_CONNECTED://接通电源
if (mBatteryStateListener != null) {
Log.e("fjasmin", "BatteryBroadcastReceiver --> onReceive--> ACTION_POWER_CONNECTED");
mBatteryStateListener.onStatePowerConnected();
}
break;
case Intent.ACTION_POWER_DISCONNECTED://拔出电源
if (mBatteryStateListener != null) {
Log.e("fjasmin", "BatteryBroadcastReceiver --> onReceive--> ACTION_POWER_DISCONNECTED");
mBatteryStateListener.onStatePowerDisconnected();
}
break;
}
}
}
}
public interface BatteryStateListener {
public void onStateChanged();
public void onStateLow();
public void onStateOkay();
public void onStatePowerConnected();
public void onStatePowerDisconnected();
}
}
MainActivity中调用:
public class MainActivity extends AppCompatActivity {
private BatteryListener listener;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
listener = new BatteryListener(this);
listener.register(new BatteryListener.BatteryStateListener() {
@Override
public void onStateChanged() {
Log.e("fjasmin", "MainActivity --> onStateChanged--> ");
}
@Override
public void onStateLow() {
Log.e("fjasmin", "MainActivity --> onStateLow--> ");
Toast.makeText(MainActivity.this, "onStateLow", Toast.LENGTH_SHORT).show();
}
@Override
public void onStateOkay() {
Log.e("fjasmin", "MainActivity --> onStateOkay--> ");
Toast.makeText(MainActivity.this, "onStateOkay", Toast.LENGTH_SHORT).show();
}
@Override
public void onStatePowerConnected() {
Log.e("fjasmin", "MainActivity --> onStatePowerConnected--> ");
Toast.makeText(MainActivity.this, "onStatePowerConnected", Toast.LENGTH_SHORT).show();
}
@Override
public void onStatePowerDisconnected() {
Log.e("fjasmin", "MainActivity --> onStatePowerDisconnected--> ");
Toast.makeText(MainActivity.this, "onStatePowerDisconnected", Toast.LENGTH_SHORT).show();
}
});
}
@Override
protected void onDestroy() {
if (listener != null) {
listener.unregister();
}
super.onDestroy();
}
}