用到的場景很多贱呐,自己發(fā)揮 奄薇,廢話不多說直接上代碼:
private classScreenBroadcastReceiverextendsBroadcastReceiver{
privateStringaction= null;
@Override
public voidonReceive(Context context,Intent intent) {
action=intent.getAction();
if(Intent.ACTION_SCREEN_ON.equals(action)) {// 開屏
mScreenStateListener.onScreenOn();
}else if(Intent.ACTION_SCREEN_OFF.equals(action)) {// 鎖屏
mScreenStateListener.onScreenOff();
}else if(Intent.ACTION_USER_PRESENT.equals(action)) {// 解鎖
mScreenStateListener.onUserPresent();
}
}
}
/**
* 開始監(jiān)聽screen狀態(tài)
*
* @paramlistener
*/
public voidbegin(ScreenStateListener listener) {
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?mScreenStateListener=listener;
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?registerListener();
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?getScreenState();
}
/**
* 獲取screen狀態(tài)
*/
private voidgetScreenState() {
? ? ?PowerManagermanager=(PowerManager)mContext.getSystemService(Context.POWER_SERVICE);
? ? ?if(manager.isScreenOn()) {
? ? ? ? ? ? ? ? if(mScreenStateListener!= null) {
? ? ? ? ? ? ? ? ? ? ? ? ?mScreenStateListener.onScreenOn();
? ? ? ? ? ? ? ?}
? ? ?}else{
? ? ? ? ? ? ? ? if(mScreenStateListener!= null) {
? ? ? ? ? ? ? ? ? ? ? ? mScreenStateListener.onScreenOff();
? ? ? ? ? ? ? ? ?}
? ? ?}
}
/**
* 停止screen狀態(tài)監(jiān)聽
*/
public voidunregisterListener() {
? ? ? ? ? ? mContext.unregisterReceiver(mScreenReceiver);
}
/**
* 啟動(dòng)screen狀態(tài)廣播接收器
*/
private voidregisterListener() {
? ? ? ? IntentFilterfilter= newIntentFilter();
? ? ? ? filter.addAction(Intent.ACTION_SCREEN_ON);
? ? ? ? filter.addAction(Intent.ACTION_SCREEN_OFF);
? ? ? ? filter.addAction(Intent.ACTION_USER_PRESENT);
? ? ? ? mContext.registerReceiver(mScreenReceiver,filter);
}
public interfaceScreenStateListener{// 返回給調(diào)用者屏幕狀態(tài)信息
? ? ? ? ? public voidonScreenOn();
? ? ? ? ? public voidonScreenOff();
? ? ? ? ? public voidonUserPresent();
? ? }
}
在上面的代碼中,用到了動(dòng)態(tài)注冊廣播,在需要監(jiān)聽屏幕狀態(tài)的activity中直接調(diào)用,當(dāng)不需要監(jiān)聽的時(shí)候,如activity finish的時(shí)候,使用unregisterListener解除廣播監(jiān)聽;
下面是在Activity中調(diào)用;
ScreenListener screenListener = new ScreenListener(this) ;?
screenListener.begin(new ScreenListener.ScreenStateListener() {
@Override
public void onScreenOn() {
? ? ? ? ? ? ? ? Toast.makeText( CounterTActivity.this , "屏幕打開了" , Toast.LENGTH_SHORT ).show();
}
@Override
public void onScreenOff() {
? ? ? ? ? ? ? ? Toast.makeText( CounterTActivity.this , "屏幕關(guān)閉了" , Toast.LENGTH_SHORT ).show();
}
@Override
public void onUserPresent() {
? ? ? ? ? ? ? ? Toast.makeText( CounterTActivity.this , "解鎖了" , Toast.LENGTH_SHORT ).show();
}
});