package com.android.fingerprintcallbackdemo;
import android.annotation.SuppressLint;
import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
import android.content.IntentFilter;
import android.os.PowerManager;
public class ScreenObserver {
private Context mContext;
private ScreenBroadcastReceiver mScreenReceiver;
private ScreenStateListener mScreenStateListener;
public ScreenObserver(Context context){
mContext = context;
mScreenReceiver = new ScreenBroadcastReceiver();
}
public void startObserver(ScreenStateListener listener){
mScreenStateListener = listener;
registerListener();
getScreenState();
}
public void shutdownObserver(){
unregisterListener();
}
@SuppressLint("NewApi")
private void getScreenState(){
if(mContext == null){
return;
}
PowerManager manager = (PowerManager)mContext.getSystemService(Context.POWER_SERVICE);
if(manager.isInteractive()){
if(mScreenStateListener != null){
mScreenStateListener.onScreenOn();
}
}else{
if(mScreenStateListener != null){
mScreenStateListener.onScreenOff();
}
}
}
private void registerListener(){
if(mContext != null){
IntentFilter filter = new IntentFilter();
filter.addAction(Intent.ACTION_SCREEN_OFF);
filter.addAction(Intent.ACTION_SCREEN_ON);
filter.addAction(Intent.ACTION_USER_PRESENT);
mContext.registerReceiver(mScreenReceiver, filter);
}
}
private void unregisterListener(){
if(mContext != null){
mContext.unregisterReceiver(mScreenReceiver);
}
}
private class ScreenBroadcastReceiver extends BroadcastReceiver{
private String action = null;
@Override
public void onReceive(Context context, Intent intent) {
action = intent.getAction();
android.util.Log.i("fenghaitao", "===========ScreenObserver onreceive=======action="+action);
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();
}
}
}
public interface ScreenStateListener{
public void onScreenOn();
public void onScreenOff();
public void onUserPresent();
}
}