定义一个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();
}
});
我这个程序中,需要实现锁屏的时候停止请求摄像头数据,当解锁后需要重新请求窗子数据和摄像头数据,具体情况具体再做处理