Android中系统自带锁WalkLock与KeyguardLock用法实例详解

本文实例讲述了Android中系统自带锁WalkLock与KeyguardLock用法。分享给大家供大家参考,具体如下:

WalkLock - 顾名思义 唤醒锁 点亮屏幕用的
KeyguardLock - 顾名思义 键盘锁 解锁键盘用的

详细介绍:

1: WalkLock 唤醒锁

- WalkLock真的能点亮屏幕吗?

答案是肯定的。 可是有时候为什么不点亮屏幕,这个就是参数设置的问题了。

代码如下:

PowerManager.newWakeLock(PowerManager.FULL_WAKE_LOCK | PowerManager.ACQUIRE_CAUSES_WAKEUP, "Gank");

PowerManager.FULL_WAKE_LOCK 这个参数是手机点亮的程度,(什么Cpu,屏幕亮度,键盘灯)
PowerManager.ACQUIRE_CAUSES_WAKEUP 关键是这个参数的理解。
WalkLock点亮屏幕并非真的去点亮了屏幕,你可以理解为,它通过Android组件(Activity)去点亮了屏幕。

假如一个通知想去点亮屏幕,问题来了,它能点亮吗? 肯定不行。

不过拥有这个PowerManager.ACQUIRE_CAUSES_WAKEU参数,你就可以点亮屏幕了。它使WalkLock不再依赖组件就可以点亮屏幕了。

- WalkLock如何获得屏幕的状态?

PowerManager.isScreenOn()方法;这个方法返回true: 屏幕是唤醒的  返回false:屏幕是休眠的

- WalkLock唤醒和休眠的方法?

WalkLock.aquire() 在屏幕休眠的状态下唤醒屏幕
WalkLock.release() 在屏幕点亮的状态下,使屏幕休眠。

WalkLock.release()这个方法有个需要注意的地方:

例如:WalkLockA对象先唤醒了屏幕再使屏幕休眠,ok没问题

屏幕本身就是唤醒状态,WalkLockA对象没有唤醒过屏幕,WalkLockA对象如果尝试使屏幕休眠。会产生一个异常 UnLock Sreen。

2:KeyguardLock 键盘锁

- KeyguardLock获得当前屏幕是否解锁?

KeygroundManager.inKeyguardRestrictedInputMode() 返回true表示键盘锁住, 返回false表示键盘解锁中

- KeyguardLock给屏幕解锁和上锁?

KeyguardLock.disableKeyguard()解锁键盘
KeyguardLock.reenableKeyguard()锁键盘

KeyguardLock没有上面唤醒锁的问题,就是无论你键盘是否由KeyguardLockA解锁,你调用KeyguardLockA对象的reenableKeyguard()方法都不会有异常。

这两把锁一些概念性的理解,假如你认为你获得了一个键盘锁对象,你就可以锁屏幕了。这个就大错特错了。

你锁不了其他程序打开的屏幕(如果可以的话,一个for循环一直锁你屏幕,你哭都没眼泪)

你可以控制自己的锁,别想着别人的锁。

最后总结下用法:

一般这两把锁都是配合使用的,你解锁屏幕的时候肯定不希望屏幕漆黑一片。关闭键盘锁的时候希望屏幕也同时休眠。

问题:

1:我尝试手动关闭屏幕,可是总继续亮那么一小会。
2:如果手机自动关闭屏幕的话,不会有这个问题。

public void unlockScreen() {
  // 获取PowerManager的实例
  PowerManager pm = (PowerManager) mContext
      .getSystemService(Context.POWER_SERVICE);
  // 得到一个WakeLock唤醒锁
  mWakelock = pm.newWakeLock(PowerManager.FULL_WAKE_LOCK
      | PowerManager.ACQUIRE_CAUSES_WAKEUP
      | PowerManager.ON_AFTER_RELEASE, "SimpleTimer");
  if (!mWakelock.isHeld()) {
    // 唤醒屏幕
    mWakelock.acquire();
  }
  // 获得一个KeyguardManager的实例
  km = (KeyguardManager) mContext
      .getSystemService(Context.KEYGUARD_SERVICE);
  // 得到一个键盘锁KeyguardLock
  mKeyguardLock = km.newKeyguardLock("SimpleTimer");
  if (km.inKeyguardRestrictedInputMode()) {
    // 解锁键盘
    mKeyguardLock.disableKeyguard();
  }
}

注意,这里使用的mWakelock.isHeld())来判断屏幕当前是否是休眠状态,从Android 2.1 API Level7开始增加了一个判断屏幕是否处于点亮状态可以使用public boolean isScreenOn ()这个方法。

锁屏幕的代码是

public void lockScreen() {
  // release screen
  if (!km.inKeyguardRestrictedInputMode()) {
    // 锁键盘
    mKeyguardLock.reenableKeyguard();
  }
  // 使屏幕休眠
  if (mWakelock.isHeld()) {
    mWakelock.release();
  }
}

希望本文所述对大家Android程序设计有所帮助。

(0)

相关推荐

  • Android控件之AnalogClock与DigitalClock用法实例分析

    本文实例讲述了Android控件之AnalogClock与DigitalClock用法.分享给大家供大家参考.具体如下: 时钟控件包括AnalogClock和DigitalClock,它们都负责显示时钟,所不同的是AnalogClock控件显示模拟时钟,且只显示时针和分针,而DigitalClock显示数字时钟,可精确到秒 以下模拟时钟的用法 目录结构: 布局文件 <?xml version="1.0" encoding="utf-8"?> <!-

  • Android编程实现禁止系统锁屏与解锁亮屏的方法

    本文实例讲述了Android编程实现禁止系统锁屏与解锁亮屏的方法.分享给大家供大家参考,具体如下: 需求: 某个时刻任务执行完毕,关闭屏幕,某时刻再开启屏幕继续执行任务 通常情况下,不设置屏幕常亮,系统会自动锁屏,锁屏后不能从代码解锁(疑问),所以我的做法是只让系统关闭屏幕,但不锁屏! WakeLock lock, unLock; KeyguardManager km; KeyguardLock kl; unLock = pm.newWakeLock(PowerManager.ACQUIRE_C

  • Android AnalogClock简单使用方法实例

    本文实例讲述了Android AnalogClock简单使用方法.分享给大家供大家参考,具体如下: AnalogClock组件的使用很简单,先来看看效果图: AnalogClock组件的使用只需要在布局中指定的显示位置写入此组件即可使用,不需要在java代码中进行实例化. <?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.a

  • Android DigitalClock组件用法实例

    本文实例讲述了Android DigitalClock组件用法.分享给大家供大家参考,具体如下: DigitalClock组件的使用很简单,先看看效果图: DigitalClock只需要在布局文件中,用于显示时间的地方使用此组件即可,无需用java代码进行实例化. <?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.andro

  • android WakeLock使用方法代码实例

    Android中提供了一个名为WakeLock的类在android.os.PowerManager.WakeLock中,从名字来看WakeLock是唤醒锁的意思,它可以控制屏幕的背光开关,所以在电源管理类. WakeLock实例化方法比较简单,因为是系统的远程服务,通过下面的代码来构造 复制代码 代码如下: PowerManager pm = (PowerManager) getSystemService(Context.POWER_SERVICE); PowerManager.WakeLock

  • Android编程之自定义锁屏实例分析

    本文实例讲述了Android编程之自定义锁屏.分享给大家供大家参考,具体如下: 花了半天时间研究下了自定义锁屏,发现其实实现并不是很神秘.不过有些地方还是值得注意. 首先说流程,锁屏界面一般是在关闭屏幕时启用,打开屏幕时展现在我们面前,所以我们知道了锁屏的时机,恰好屏幕开关会发出相应的广播,所以我们也可以像系统一样捕获到屏幕开关的事件. 广播对应的两个action 引用 android.intent.action.SCREEN_ON android.intent.action.SCREEN_OF

  • Android系统永不锁屏永不休眠的方法

    开发Android程序时,有时候在程序运行的时候,不能让系统休眠,否则有一些运行会停止,因此我们需要设置禁止休眠,有两种方式:        一种是添加权限,              一种是代码中设置, 建议使用第一种方式,这样,在安装程序的时候会进行提醒: 第一种方式: 在Manifest.xml文件里面用user-permission声明 名称为:android.permission.WAKE_LOCK 第二种方式: getWindow().setFlags(WindowManager.L

  • Android 监听锁屏、解锁、开屏 功能代码

    1.首先定义 ScreenListener package com.app.lib; import android.content.BroadcastReceiver; import android.content.Context; import android.content.Intent; import android.content.IntentFilter; import android.os.PowerManager; /** * Created by ${zyj} on 2016/6

  • Android屏幕锁屏弹窗的正确姿势DEMO详解

    在上篇文章给大家介绍了Android程序开发仿新版QQ锁屏下弹窗功能.今天通过本文给大家分享android锁屏弹窗的正确姿势. 最近在做一个关于屏幕锁屏悬浮窗的功能,于是在网上搜索了很多安卓屏幕锁屏的相关资料,鉴于网上的资料比较零碎,所以我在这里进行整理总结.本文将从以下两点对屏幕锁屏进行解析: 1. 如何监听系统屏幕锁屏 2. 如何在锁屏界面弹出悬浮窗 如何监听系统屏幕锁屏 经过总结,监听系统的锁屏可以通过以下两种方式: 1) 代码直接判定 2) 接收广播 1) 代码直接判定 代码判断方式,也

  • Android ScreenLockReceiver监听锁屏功能示例

    本文实例讲述了Android ScreenLockReceiver监听锁屏功能.分享给大家供大家参考,具体如下: 监听屏幕锁屏状态(注册接受者--执行业务--注销接受者) public class AppLockService extends Service { private ActivityManager am; private KeyguardManager keyguardManager; private LockScreenReceiver receiver; @Override pu

  • Android应用程序保持后台唤醒(使用WakeLock实现)

    在使用一些产品列如微信.QQ之类的,如果有新消息来时,手机屏幕即使在锁屏状态下也会亮起并提示声音,这时用户就知道有新消息来临了.但是,一般情况下手机锁屏后,Android系统为了省电以及减少CPU消耗,在一段时间后会使系统进入休眠状态,这时,Android系统中CPU会保持在一个相对较低的功耗状态.针对前面的例子,收到新消息必定有网络请求,而网络请求是消耗CPU的操作,那么如何在锁屏状态乃至系统进入休眠后,仍然保持系统的网络状态以及通过程序唤醒手机呢?答案就是Android中的WakeLock机

  • Android编程实现一键锁屏的方法

    本文实例讲述了Android编程实现一键锁屏的方法.分享给大家供大家参考,具体如下: 这里要用到下面两个类: DeviceAdminReceiver 设备管理组件.这个类提供了一个方便解释由系统发出的意图的动作.你的设备管理应用程序必须包含一个DeviceAdminReceiver的子类.本程序中,就代表一个手机上的设备管理器. DevicePolicyManager 一个管理设备上规范的类. 大多数客户端必须声明一个用户当前已经启用的DeviceAdminReceiver. 这个DeviceP

随机推荐