当前位置: 首页 > article >正文

Android 判断当前是否亮灭屏状态或黑屏锁屏状态

1. 通过PowerManager的isScreenOn方法,判断当前是否处于亮屏还是灭屏:

PowerManager pm = (PowerManager) context.getSystemService(Context.POWER_SERVICE);
boolean isScreenOn = pm.isScreenOn();

if (mPowerManager.isScreenOn() || mPowerManager.isInteractive()) {

}else{

}

引用方法:

public static boolean isScreenOn(Context context) {
       PowerManager pm = (PowerManager) context.getSystemService(Context.POWER_SERVICE);
        return pm.isScreenOn();
    }

 

如果isScreenOn 为true,则表示屏幕“亮”了。
屏幕“亮”,表示有两种状态:a、未锁屏亮屏 b、目前正处于解锁状态亮屏 。这两种状态屏幕都是亮的 
屏幕“暗”,表示目前屏幕是黑的 

2.通过KeyguardManager的inKeyguardRestrictedInputMode方法,判断当前是否黑屏及锁屏的情况:

KeyguardManager mKeyguardManager = (KeyguardManager) context.getSystemService(Context.KEYGUARD_SERVICE);
boolean flag = mKeyguardManager.inKeyguardRestrictedInputMode();

引用方法:

public static boolean isScreenOff(Context context) {
        KeyguardManager manager = (KeyguardManager) context.getSystemService(context.KEYGUARD_SERVICE);
        return manager.inKeyguardRestrictedInputMode();
    }

如果flag为true,表示有两种状态:a、屏幕是黑的(锁屏中黑的) b、目前正处于解锁状态(锁屏中但是亮的) 。
如果flag为false,表示目前未锁屏  (亮的)

3.可以通过反射机制来调用

private static Method mScreenState;
try {
    mScreenState = PowerManager.class.getMethod(isScreenOn, new Class[] {});
    PowerManager pm = (PowerManager) context.getSystemService(Activity.POWER_SERVICE);
    boolean isScreenOn= (Boolean) mScreenState.invoke(pm);
} catch (Exception e) {
    e.printStackTrace()
}

 

 4,特殊广播方法:

private ScreenBroadcastReceiver mScreenReceiver;
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)) {           
            // 开屏,处理什么逻辑
        } else if (Intent.ACTION_SCREEN_OFF.equals(action)) { 
            // 锁屏
        } else if (Intent.ACTION_USER_PRESENT.equals(action)) { 
            // 解锁
        }
    }
}
private void startScreenBroadcastReceiver() {
    IntentFilter filter = new IntentFilter();
    filter.addAction(Intent.ACTION_SCREEN_ON);
    filter.addAction(Intent.ACTION_SCREEN_OFF);
    filter.addAction(Intent.ACTION_USER_PRESENT);
    context.registerReceiver(mScreenReceiver, filter);
}


http://www.kler.cn/a/399612.html

相关文章:

  • 深度学习笔记14-卷积神经网络2
  • 9.C++面向对象6(实现一个较为完善的日期类)
  • 【Android】EventBus事件总线用法浅析
  • 工厂模式-工厂方法模式实现
  • [ 网络安全介绍 3 ] 网络安全事件相关案例有哪些?
  • SpringBoot多环境配置的实现
  • 小白快速上手 labelme:新手图像标注详解教程
  • 集群聊天服务器(3)muduo网络库
  • 编译sddm 0.18.1 依赖
  • 图像分类之花卉识别实验验证
  • LeetCode59. 螺旋矩阵 II
  • 交换排序——快速排序
  • 网络基础Linux
  • Spring MVC 与 JSP 数据传输
  • Prompt Engineering Guide
  • 理解和选择Vue的组件风格:组合式API与选项式API详解
  • STM32单片机设计防儿童人员误锁/滞留车内警报系统
  • vue项目中使footer始终保持底部的几种实现方法
  • 2024年11月16日 星期六 重新整理Go技术
  • Python_爬虫1_Requests库入门
  • STM32设计电流与温度监控python上位机监控平台设计
  • SQL Server中,CONVERT函数转换日期
  • 支持用户注册和登录、发布动态、点赞、评论、私信等功能的社交媒体平台创建!!!
  • Java在移动端小程序开发中的性能优化研究
  • Mac——基本操作使用整理
  • 【设计模式】行为型模式(五):解释器模式、访问者模式、依赖注入