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、付费专栏及课程。

余额充值