转载请注明:http://blog.csdn.net/heroxuetao/article/details/24639203

因为做一个项目,须要推断屏幕是否锁屏,发现网上方法非常多。可是比較杂。如今进行总结一下:

总共同拥有两类方法:

一、代码直接判定

二、接收广播

如今先说第一类方法(代码直接判定):

1、通过PowerManager的isScreenOn方法,代码例如以下:

PowerManager pm = (PowerManager) context.getSystemService(Context.POWER_SERVICE);
boolean isScreenOn = pm.isScreenOn();//假设为true,则表示屏幕“亮”了,否则屏幕“暗”了。

凝视已经写的非常明确了,如今大概说一下,

屏幕“亮”。表示有两种状态:a、未锁屏  b、眼下正处于解锁状态  。这两种状态屏幕都是亮的

屏幕“暗”,表示眼下屏幕是黑的  。

2、通过KeyguardManager的inKeyguardRestrictedInputMode方法,代码例如以下:

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

凝视已经写的非常明确了。如今大概说一下,boolean flag = mKeyguardManager.inKeyguardRestrictedInputMode();

源代码的返回值的解释是:true if in keyguard restricted input mode.

经过试验,总结为:

假设flag为true。表示有两种状态:a、屏幕是黑的  b、眼下正处于解锁状态  。

假设flag为false,表示眼下未锁屏



注明:上面的两种方法,也能够通过反射机制来调用。

以下以第一个方法为例说明一下。

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

如今介绍第二类方法(接收系统的广播):

接收系统广播事件。屏幕在三种状态(开屏、锁屏、解锁)之间变换的时候,系统都会发送广播,我们仅仅须要监听这些广播就可以。

代码例如以下:

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);
}

好了,就写这么多了。希望对大家实用。!

Android推断屏幕锁屏的方法总结的更多相关文章

  1. Android判断屏幕锁屏的方法总结

    由于做一个项目,需要判断屏幕是否锁屏,发现网上方法很多,但是比较杂,现在进行总结一下: 总共有两类方法: 一.代码直接判定 二.接收广播 现在先说第一类方法(代码直接判定): 1.通过PowerMan ...

  2. Android 禁止屏幕休眠和锁屏的方法

    Introduction 常常我们开 发程序的时候我们不需要系统唤醒系统锁屏功能,比如我们在做xxxNowTV或XXX播放器这样的程序,用户有时候在看电视或视频的时候不希望系统的锁屏 功能启动,既不想 ...

  3. BroadcastReceiver之(手动代码注册广播)屏幕锁屏、解锁监听、开机自启

    对于解锁和锁屏这种用的比较频繁action,谷歌做了限制,必须手动用代码注册 直接上代码:这是注册广播(手动代码注册广播接收者) public class MainActivity extends A ...

  4. Android端恶意锁屏勒索应用分析

    一.前言 5月12日,一场全球性互联网灾难悄然而至,一款名为WannaCRY的PC端恶意勒索软件利用NSA泄漏的危险漏洞“永恒之蓝”,给100多个国家和地区10万台电脑造成了巨大的损失.到2017年为 ...

  5. 【Android】Android 手机忘记锁屏密码的解决办法

    对于忘记Android锁屏密码的筒子们,除重新刷包或者wipe data外,还可用adb来删除密码: 方法很简单 1.手机连接电脑,不要打开数据连接,在充电模式下进行. 2.在电脑上,解压adb.zi ...

  6. Android 监听屏幕锁屏,用户解锁

    在做一个程序的时候,需要时刻保持某一服务是启动的,因此想到了通过监听屏幕SCREEN_ON和SCREEN_OFF这两个action.奇怪的是,这两个action只能通过代码的形式注册,才能被监听到,使 ...

  7. Android 监听屏幕锁屏&用户解锁

    在做视频播放器的时候,遇到一个问题,在用户播放视频然后锁屏之后,视频播放器仍然在继续播放,遇到类似手机系统状态改变的问题的时候,首先想到了广播,下面做个总结: public class ScreenL ...

  8. Android 监听锁屏、解锁、开屏 操作

    1.首先定义 ScreenListener  package com.app.lib; import android.content.BroadcastReceiver; import android ...

  9. 解决Android手机 屏幕横竖屏切换

    Android中当屏幕横竖屏切换时,Activity的生命周期是重新加载(说明当前的Activity给销毁了,但又重新执行加载),怎么使屏幕横竖屏切换时,当前的Activity不销毁呢? 1. 在An ...

随机推荐

  1. 预采订单管理接收来源App数据

  2. poj3411 Paid Roads

    思路: 搜索.注意点和边都有可能经过多次. 实现: #include <iostream> #include <cstdio> #include <vector> ...

  3. ubuntu系统中查看本机cpu和内存信息的命令和用法

    https://zhidao.baidu.com/question/192966322.html 写出ubuntu linux系统中查看本机cpu和内存信息的命令和用法,以及如何解读这些命令 ubun ...

  4. re.S解析

    转自:https://www.cnblogs.com/xieqiankun/p/re-sinpython.html 在Python的正则表达式中,有一个参数为re.S.它表示“.”(不包含外侧双引号, ...

  5. Pro ASP.Net Core MVC 6th 第四章

    第四章 C# 关键特征 在本章中,我描述了Web应用程序开发中使用的C#特征,这些特征尚未被广泛理解或经常引起混淆. 这不是关于C#的书,但是,我仅为每个特征提供一个简单的例子,以便您可以按照本书其余 ...

  6. redhat之数据挖掘R语言软件及rstudio-server服务的安装

    安装时间:2015年8月25日 22:55:35 作者:luomg 软件:R.Rstudio-server 环境:redhat6.2 联系:luomgf@163.com 声明:如果你有遇到安装中的问题 ...

  7. getBlockTable delete pline

    AcDbBlockTable *pBlkTab; Acad::ErrorStatus es = acdbHostApplicationServices()->workingDatabase() ...

  8. 表格 —— 一个单元格插入多个tags

    <st #st [columns]="columns" [data]="data" [bordered]='true'> <ng-templa ...

  9. 梦想CAD控件安卓控件事件

    MxDrawActivity.commandEvent 命令调用事件. 参数 说明 int iCommand 命令ID,这个ID用户自已来取的,只要多个命令ID不重复就可以 代码实现如下: publi ...

  10. nfs服务权限配置

    nfs服务权限配置 1. 查看系统是否已经安装了服务Rpm -qa | grep nfs 2. 启动服务,并且开机自动运行Systemctl start nfsSystemctl enabled nf ...