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. 4种必须知道的Android屏幕自适应解决方案
  2. 获取android屏幕大小
  3. android点亮(唤醒)屏幕
  4. Android 利用adb命令 使App自动点击屏幕指定位置
  5. 不让屏幕翻转扰乱你的进度对话框
  6. android 获取屏幕高度和宽度
  7. android 获取屏幕的方向
  8. Android Setting中添加解除屏幕锁选项
  9. Android 在屏幕上打印LOG

随机推荐

  1. JPush极光推送Java服务器端API
  2. android 通过广播获取指定联系人短信内容
  3. android经典优化点
  4. 2013.12.04 (4)——— android SlidingMenu
  5. 两个界面的切换
  6. Local Caching of Remote Images in AIR
  7. Android应用程序键盘(Keyboard)消息处理机
  8. Android中直接按路径读取properties文件
  9. 启动虚拟机出现cannot launch AVD in emu
  10. LitePal框架上手小记录