Android5.0的自定义低电量警告
https://blog.csdn.net/huageshiya/article/details/48573757
应客户需求,在电量为10,7,5,2的时候,弹出低电量警告框,并且每次弹框,点一下确定就不再弹了。
/frameworks/base/packages/SystemUI/src/com/android/systemui/power/PowerUI.java里有个监听电池状态的广播,打log发现,每隔10秒,电池状态会报一次,具体修改如下
AlertDialog mBadWaringDialog = null;
//低电量警告框
private void showWarningLowBatteryAlert(int battery) {
dismissWarningLowBatteryDialog();
AlertDialog.Builder b = new AlertDialog.Builder(mContext);
b.setCancelable(true);
b.setMessage( mContext.getResources().getString(R.string.hct_battery_level) +
battery + mContext.getResources().getString(R.string.hct_charging_tip));
b.setIconAttribute(android.R.attr.alertDialogIcon);
b.setPositiveButton(android.R.string.ok, null);
//b.show();
AlertDialog d = b.create();
d.setOnDismissListener(new DialogInterface.OnDismissListener() {
public void onDismiss(DialogInterface dialog) {
mBadWaringDialog = null;
}
});
d.getWindow().setType(WindowManager.LayoutParams.TYPE_SYSTEM_ALERT);
d.show();
mBadWaringDialog = d;
}
private final class Receiver extends BroadcastReceiver {
@Override
public void onReceive(Context context, Intent intent) {
String action = intent.getAction();
if (action.equals(Intent.ACTION_BATTERY_CHANGED)) {
if(!plugged && mBatteryStatus != BatteryManager.BATTERY_STATUS_CHARGING && (oldBatteryLevel > mBatteryLevel)){
if(mBatteryLevel == 10){
showWarningLowBatteryAlert(10);
}else if(mBatteryLevel == 4){
showWarningLowBatteryAlert(4);
}else if(mBatteryLevel == 1){
showWarningLowBatteryAlert(1);
}else if(mBatteryLevel == 15){
showWarningLowBatteryAlert(15);
}
}
if(mBatteryStatus == BatteryManager.BATTERY_STATUS_CHARGING
|| mBatteryStatus == BatteryManager.BATTERY_STATUS_FULL){
dismissWarningLowBatteryDialog();
}
这里弹框的时候,一定要判断oldBatteryLevel > mBatteryLevel,因为每隔10秒都会接收到这个广播,为了保证每次低电量只弹一次,必须要在电池电量跳变的时候弹框,可能说的有点啰嗦,大家会理解的