为了账号安全,请及时绑定邮箱和手机立即绑定

想问下有没有其他方法,还是我的实现有问题?

想问下有没有其他方法,还是我的实现有问题?

慕斯王 2022-10-11 15:11:45
休眠的过程是屏幕先变灰再变黑,想要实现在自动休眠灰屏时,点击后(屏幕会变亮)实现一些操作。试了以下两种方案:1、注册SCREEN_BRIGHTNESS广播,尝试获取屏幕的变化,无果,应该是android自身没有发送对应的广播消息2、点击时获取系统的亮度值,(通过oldBrightness = getInt(getContentResolver(), SCREEN_BRIGHTNESS);)但发现还是255,即还是亮,所以无法判断。
查看完整描述

2 回答

?
慕虎7371278

TA贡献1802条经验 获得超4个赞

系统会发送广播
Intent.ACTION_SCREEN_OFF

Intent.ACTION_SCREEN_ON

Intent.ACTION_USER_PRESENT

查看完整回答
反对 回复 2022-10-16
?
白衣染霜花

TA贡献1796条经验 获得超10个赞

捕捉自动休眠灰屏的事件,可以通过监听系统的广播获得当前手机屏幕的状态,广播需要在注册文件中注册,具体的实现代码如下:

  public class ScreenListener {
private Context mContext;
private ScreenBroadcastReceiver mScreenReceiver;
private ScreenStateListener mScreenStateListener;

public ScreenListener(Context context) {
mContext = context;
mScreenReceiver = new ScreenBroadcastReceiver();
}

/**
* screen状态广播接收者
*/
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();
}
}
}

/**
* 开始监听screen状态
*
* @param listener
*/
public void begin(ScreenStateListener listener) {
mScreenStateListener = listener;
registerListener();
getScreenState();
}

/**
* 获取screen状态
*/
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();
}
}
}

/**
* 停止screen状态监听
*/
public void unregisterListener() {
mContext.unregisterReceiver(mScreenReceiver);
}

/**
* 启动screen状态广播接收器
*/
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中,当不需要监听的时候,如activity finish的时候,使用unregisterListener解除广播监听;
下面是在Activity中调用;
  ScreenListener l = new ScreenListener(this);
l.begin(new ScreenStateListener() {

@Override
public void onUserPresent() {
Log.e("onUserPresent", "onUserPresent");
}

@Override
public void onScreenOn() {
Log.e("onScreenOn", "onScreenOn");
}

@Override
public void onScreenOff() {
Log.e("onScreenOff", "onScreenOff");
}
});

  通过以上步骤即实现了对屏幕状态的监听.


查看完整回答
反对 回复 2022-10-16
  • 2 回答
  • 0 关注
  • 211 浏览

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号