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();
}
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();
}
相关文章推荐
- android 使用浏览器打开指定页面的实现方法
- android 文件关联的方法 实现点击文件打开指定应用软件
- 【Android开发那点破事】打开APP加载页面实现
- 【Android开发那点破事】打开APP加载页面实现
- android:如果手机安装了app则打开一个activity,如果没有安装则去到android market如何在HTML页面实现
- Android实现外部链接唤醒App,并且在App内部打开详情页面
- Android App跳转App以及App跳转指定App页面的实现
- android:如果手机安装了app则打开一个activity,如果没有安装则去到android market如何在HTML页面实现
- Android实现带页面切换的锁屏功能
- iOS 一个app跳转另一个app并实现通信(如A跳到B并打开B中指定页面)
- Android打开手机QQ与指定用户聊天界面,打开指定用户的微博页面,打开指定用户的支付宝转账页面
- Android开发实现判断通知栏是否打开及前往设置页面的方法
- 【Android实测】调起系统浏览器打开指定页面代码
- android锁屏状态下, 新消息唤醒屏幕,并跳转到指定页面
- iOS 一个app跳转另一个app并实现通信(如A跳到B并打开B中指定页面)
- Android实现深度链接(APP外带动态参数唤醒APP,并跳转指定页面,APP不论在不在运行都可以)
- android锁屏页面的实现
- Android实现自定义锁屏控制
- Android实现移动小球和CircularReveal页面切换动画实例代码
- Android实现点击通知栏后,先启动应用再打开目标Activity ,极光推送等推送的也可以参考一下(转)