package com.EleMenu_YuanXu_v12.Util;


import java.lang.reflect.Method;


import android.app.Activity;
import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
import android.content.IntentFilter;
import android.os.PowerManager;
import android.util.Log;


/**
 * 实现当屏幕锁定时,打开会跳到制定的开始页面
 * @author linyuancong
 *
 */
public class ScreenObserver{
private static String TAG = "ScreenObserver";
private Context mContext;
//---屏幕广播接收
private ScreenBroadcastReceiver mScreenReceiver;
//---屏幕状态监听器
    private ScreenStateListener mScreenStateListener;
    private static Method mReflectScreenState;
    
public ScreenObserver(Context context){
mContext = context;
mScreenReceiver = new ScreenBroadcastReceiver();
try {
mReflectScreenState = PowerManager.class.getMethod("isScreenOn",
new Class[] {});
} catch (NoSuchMethodException nsme) {
Log.d(TAG, "API < 7," + nsme);
}
}

/**
     * screen鐘舵�骞挎挱鎺ユ敹鑰�     * @author zhangyg
     *
     */
    private class ScreenBroadcastReceiver extends BroadcastReceiver{
    private String action = null;
    @Override
    public void onReceive(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();
    }
    }
    }
    

/**
* 璇锋眰screen鐘舵�鏇存柊
* @param listener
*/
public void requestScreenStateUpdate(ScreenStateListener listener) {
mScreenStateListener = listener;
startScreenBroadcastReceiver();

firstGetScreenState();
}

/**
* 绗竴娆¤姹俿creen鐘舵�
*/
private void firstGetScreenState(){
PowerManager manager = (PowerManager) mContext
.getSystemService(Activity.POWER_SERVICE);
if (isScreenOn(manager)) {
if (mScreenStateListener != null) {
mScreenStateListener.onScreenOn();
}
} else {
if (mScreenStateListener != null) {
mScreenStateListener.onScreenOff();
}
}
}

/**
* 鍋滄screen鐘舵�鏇存柊
*/
public void stopScreenStateUpdate(){
mContext.unregisterReceiver(mScreenReceiver);
}

/**
* 鍚姩screen鐘舵�骞挎挱鎺ユ敹鍣� */
    private void startScreenBroadcastReceiver(){
    IntentFilter filter = new IntentFilter();
    filter.addAction(Intent.ACTION_SCREEN_ON);
    filter.addAction(Intent.ACTION_SCREEN_OFF);
    mContext.registerReceiver(mScreenReceiver, filter);
    }

    /**
     * screen鏄惁鎵撳紑鐘舵�
     * @param pm
     * @return
     */
private static boolean isScreenOn(PowerManager pm) {
boolean screenState;
try {
screenState = (Boolean) mReflectScreenState.invoke(pm);
} catch (Exception e) {
screenState = false;
}
return screenState;
}

public interface ScreenStateListener {
public void onScreenOn();
public void onScreenOff();
}

}


、-------下面是实现改类的方法

private ScreenObserver mScreenObserver;//---屏幕监听


//======初始化屏幕监听
private void initScreen() {
mScreenObserver = new ScreenObserver(this);


mScreenObserver.requestScreenStateUpdate(new ScreenStateListener() {
@Override
public void onScreenOn() {
doSomethingOnScreenOn();
}


@Override
public void onScreenOff() {
doSomethingOnScreenOff();
}

});

}
//当屏幕获得焦点时需要做的事情
private void doSomethingOnScreenOn() {

}
//当屏幕锁定时需要做的事情
private void doSomethingOnScreenOff() {
//------从这里修改需要显示的首页--------
Intent intent = new Intent(this,EleMenu_YuanXu_v12Activity.class);
startActivity(intent);
MainActivity.this.finish();
}
//----当销毁时要停止屏幕监听
@Override
protected void onDestroy() {
super.onDestroy();
//鍋滄鐩戝惉screen鐘舵�
mScreenObserver.stopScreenStateUpdate();
}

更多相关文章

  1. Android监听Home键和最近任务
  2. android传感器;摇一摇抽签功能
  3. [中英文对照]android Designing for TV(一) ------ Optimizing L
  4. 监听TextView的变动
  5. Android:可移动悬浮框
  6. Android回调事件传播-android学习之旅(四十五)
  7. 【android】监听网络变化连续多个广播的问题解决
  8. android spinner 选中后显示字体的颜色设置
  9. Android(安卓)响应键盘移动图标

随机推荐

  1. 本年度最令人期待的5款Android智能手机!
  2. Android智能电视开发之明星UI---Recycler
  3. android实现电子数字显示
  4. Android(安卓)Studio的一些配置(去拼写检
  5. MWC2012开幕在即:看现场 猜趋势
  6. [置顶] Android之路——第一个上线 APP项
  7. Android键盘系统——改变按键功能(2)
  8. Android中AES加密解密。解决密文不唯一、
  9. android 群英传笔记----Android(安卓)scr
  10. android app --- 快速接入云片网短信验证