您的位置:首页 > 移动开发 > Android开发

android ScreenObserver 实现打开锁屏键时,跳到指定的页面

2012-08-16 15:45 561 查看
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();

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐