android监测屏幕锁屏解屏

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/Lu_Ca/article/details/52101428

定义一个ScreenListener类,直接拷贝到程序中就可以用


package com.scapp;
//监测屏幕状态的类
import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
import android.content.IntentFilter;
import android.os.PowerManager;


public class ScreenListener {


private Context mContext;
   private ScreenBroadcastReceiver mScreenReceiver;
   private ScreenStateListener mScreenStateListener;
 
   public ScreenListener(Context context) {
       mContext = context;
       mScreenReceiver = new ScreenBroadcastReceiver();
   }
 
    
   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();
           } else if (Intent.ACTION_USER_PRESENT.equals(action)) { 
               mScreenStateListener.onUserPresent();
           }
       }
   }
    


   public void begin(ScreenStateListener listener) {
       mScreenStateListener = listener;
       registerListener();
       getScreenState();
   }
 
    


   private void getScreenState() {
       PowerManager manager = (PowerManager) mContext
               .getSystemService(Context.POWER_SERVICE);
       if (manager.isScreenOn()) {
           if (mScreenStateListener != null) {
               mScreenStateListener.onScreenOn();
           }
       } else {
           if (mScreenStateListener != null) {
               mScreenStateListener.onScreenOff();
           }
       }
   }
 
    
   public void unregisterListener() {
       mContext.unregisterReceiver(mScreenReceiver);
   }
 
    
   private void registerListener() {
       IntentFilter filter = new IntentFilter();
       filter.addAction(Intent.ACTION_SCREEN_ON);
       filter.addAction(Intent.ACTION_SCREEN_OFF);
       filter.addAction(Intent.ACTION_USER_PRESENT);
       mContext.registerReceiver(mScreenReceiver, filter);
   }
 
   public interface ScreenStateListener {
       public void onScreenOn();
 
       public void onScreenOff();
 
       public void onUserPresent();
   }

}

在需要监测的activity中先定义ScreenListener的一个变量

private ScreenListener screenListener;//监测屏幕状态

private boolean isLockOpenActivity = false;//用来监测是不是由锁屏然后解屏进入的activity


//屏幕锁屏 解屏

screenListener = new ScreenListener( WindowDetailActivity.this ) ;

screenListener.begin(new ScreenListener.ScreenStateListener() {

          @Override

          public void onScreenOn() {

           

          if(isLockOpenActivity){

          active = true;

           

          //拿窗户数据

          ConnectThread connThread = new ConnectThread(id, h, SCConstant.SC_INTERFACE_CONNECT);

          new Thread(connThread, "Connect").start();

          //拿摄像头数据

          ConnectThread cameraThread = new ConnectThread(id, null,

  SCConstant.SC_INTERFACE_START_VIDEO);

          new Thread(cameraThread, "Connect").start();

             

                  isLockOpenActivity = false;

          }

       

          }

 

           

          @Override

          public void onScreenOff() {

           

        isLockOpenActivity = true;

        //停止拿摄像头数据

        ConnectThread connThread = new ConnectThread(id, null,

      SCConstant.SC_INTERFACE_STOP_VIDEO);

      new Thread(connThread, "Connect").start();

  active = false;


//               Toast.makeText( WindowDetailActivity.this , "屏幕关闭了" , Toast.LENGTH_SHORT ).show();

          }

 

          @Override

          public void onUserPresent() {

//               Toast.makeText( WindowDetailActivity.this , "解锁了" , Toast.LENGTH_SHORT ).show();

          }

      });

我这个程序中,需要实现锁屏的时候停止请求摄像头数据,当解锁后需要重新请求窗子数据和摄像头数据,具体情况具体再做处理




展开阅读全文

没有更多推荐了,返回首页