android 监听自动暗屏,android亮屏、暗屏、解锁、关闭系统对话的监听事件

package com.isoft.screen;

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;

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();

}

/**

* 第一次请求screen状态

*/

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();

}

}

//activity

package com.isoft.screen;

import android.app.Activity;

import android.os.Bundle;

import android.util.Log;

import com.isoft.screen.ScreenObserver.ScreenStateListener;

public class ScreenObserverActivity extends Activity {

private String TAG = "ScreenObserverActivity";

private ScreenObserver mScreenObserver;

@Override

public void onCreate(Bundle savedInstanceState) {

super.onCreate(savedInstanceState);

setContentView(R.layout.main);

mScreenObserver = new ScreenObserver(this);

mScreenObserver.requestScreenStateUpdate(new ScreenStateListener() {

@Override

public void onScreenOn() {

/屏幕变亮

doSomethingOnScreenOn();

}

@Override

public void onScreenOff() {

//屏幕变黑

doSomethingOnScreenOff();

}

});

}

private void doSomethingOnScreenOn() {

Log.i(TAG, "Screen is on");

}

private void doSomethingOnScreenOff() {

Log.i(TAG, "Screen is off");

}

@Override

protected void onDestroy() {

super.onDestroy();

//停止监听screen状态

mScreenObserver.stopScreenStateUpdate();

}

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值