Source code:
package com.inanwong.main;
import java.util.Timer;
import java.util.TimerTask;
import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
import android.content.IntentFilter;
import android.util.Log;
public class PhoneBatTask {
private static final int TIME_SPACE_DELAY = 1000;
public static final int TIME_SPACE_PERIOD = 1800 * 1000;
public static final int PB_LOWFLAG = 15;
private Context context = null;
private int intLevel = 100;
private int intScale = 100;
private int timeInterval = TIME_SPACE_PERIOD;
private int lowFlag = PB_LOWFLAG;
private boolean isStartRegister = false;
private TimerTask batTask = new TimerTask() {
@Override
public void run() {
if (!isStartRegister) {
timer.cancel();
return;
}
disposePower(intLevel, intScale);
}
};
private final Timer timer = new Timer();
/* create BroadcastReceiver */
private BroadcastReceiver mBatteryInfoReceiver = new BroadcastReceiver() {
public void onReceive(Context context, Intent intent) {
String action = intent.getAction();
if (Intent.ACTION_BATTERY_CHANGED.equals(action)) {
intLevel = intent.getIntExtra("level", 0);
intScale = intent.getIntExtra("scale", 100);
}
}
};
private static final String TAG = "[PhoneBatTask]";
PhoneBatTask() {
// TODO Auto-generated constructor stub
}
public PhoneBatTask(Context context, int timeInterval, int lowFlag) {
this.context = context;
this.timeInterval = timeInterval;
this.lowFlag = lowFlag;
}
public boolean registerBatterBroadCast() {
boolean flag = false;
try {
this.context.registerReceiver(mBatteryInfoReceiver,
new IntentFilter(Intent.ACTION_BATTERY_CHANGED));
flag = true;
isStartRegister = true;
timer.schedule(batTask, TIME_SPACE_DELAY, timeInterval);
} catch (Exception e) {
e.printStackTrace();
}
Log.i(TAG, toString());
return flag;
}
@SuppressWarnings("unused")
private boolean unregisterBatterBroadCast() {
boolean flag = false;
try {
this.context.unregisterReceiver(mBatteryInfoReceiver);
flag = true;
isStartRegister = false;
timer.cancel();
} catch (Exception e) {
e.printStackTrace();
}
return flag;
}
public synchronized void disposePower(int intLevel, int intScale) {
if ((intLevel * 100) < (lowFlag * intScale)) {
// do sth for power low ...
}
Log.i(TAG, "intLevel = " + intLevel + "; intScale = " + intScale);
}
public void setTimeInterval(int timeInterval) {
if (this.timeInterval == timeInterval) {
return;
}
if (isStartRegister) {
this.timeInterval = timeInterval;
timer.cancel();
batTask.cancel();
timer.schedule(batTask, TIME_SPACE_DELAY, timeInterval);
}
Log.i(TAG, toString());
}
public void setLowFlag(int lowFlag) {
this.lowFlag = lowFlag;
}
@Override
public String toString() {
// TODO Auto-generated method stub
StringBuilder b = new StringBuilder();
b.append("{ timeInterval=");
b.append(timeInterval);
b.append(" lowFlag=");
b.append(lowFlag);
b.append(" intLevel=");
b.append(intLevel);
b.append(" intScale=");
b.append(intScale);
b.append(" }");
return b.toString();
}
}