最近項目中遇到一個需求,實時監測手機是否接通電源,大概效果如下:
如果拔掉電源上圖對號就隱藏
怎麼實現呢,第一想到的就是使用廣播來進行監聽,代碼如下:
/**
* 充電檢測
*/
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("zhang", "BatteryBroadcastReceiver --> onReceive--> ACTION_BATTERY_LOW");
mBatteryStateListener.onStateLow();
}
break;
case Intent.ACTION_BATTERY_OKAY://電量充滿
if (mBatteryStateListener != null) {
// Log.e("zhang", "BatteryBroadcastReceiver --> onReceive--> ACTION_BATTERY_OKAY");
mBatteryStateListener.onStateOkay();
}
break;
case Intent.ACTION_POWER_CONNECTED://接通電源
if (mBatteryStateListener != null) {
// Log.e("zhang", "BatteryBroadcastReceiver --> onReceive--> ACTION_POWER_CONNECTED");
mBatteryStateListener.onStatePowerConnected();
}
break;
case Intent.ACTION_POWER_DISCONNECTED://拔出電源
if (mBatteryStateListener != null) {
// Log.e("zhang", "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();
}
}
/**
* 使用
*/
BatteryListener listener = new BatteryListener(this);
listener.register(new BatteryListener.BatteryStateListener() {
@Override
public void onStateChanged() { //電量發生改變
}
@Override
public void onStateLow() { //電量低
}
@Override
public void onStateOkay() { //電量充滿
}
@Override
public void onStatePowerConnected() { //接通電源
charge_true.setVisibility(View.VISIBLE);
}
@Override
public void onStatePowerDisconnected() { //拔出電源
charge_true.setVisibility(View.GONE);
}
});
以上就是全部的實現,特此寫一篇帖子記錄,方便以後使用,希望可以給遇到同樣需求的同學帶來幫助。
會不定時更新安卓相關知識,喜歡的給點一下關注,感謝大家支持!!