锁屏设置:
1. 初始值 : <integer name="def_screen_off_timeout">60000</integer>
2. 数据库/data/data/com.android.providers.settings/databases/settings.db中
        system 表 screen_off_timeout.
3. 开机锁屏, 在frameworks/policies/base/phone/com/android/internal/policy/impl/KeyguardViewMediator.java 文件中修改 mExternallyEnabled 值为false即可. 或者调用setKeyguardEnabled来解锁.
4. 程序禁止锁屏:
方法一:
   getWindow().setFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON, WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON);
方法二:         
   mWakeLock = pManager.newWakeLock(PowerManager.SCREEN_BRIGHT_WAKE_LOCK
                                    | PowerManager.ON_AFTER_RELEASE, TAG);
   mWakeLock.acquire();

参考:

android禁止锁频  http://my.unix-center.net/~Simon_fu/?p=538

锁屏方法和android事件处理过程分析  http://blog.sina.com.cn/s/blog_3e3fcadd0100hrzf.html

Android下Dialog及Activity屏蔽Home键详解    http://www.linuxidc.com/Linux/2011-10/46150p2.htm

相关参数:
screen_brightness_mode : 锁屏模式, 
        0 = 手动锁屏
        1 = 自动锁屏
private static final int SCREEN_ON_BIT          = 0x00000001;
    屏幕亮
private static final int SCREEN_BRIGHT_BIT      = 0x00000002;
    屏幕背光亮
private static final int BUTTON_BRIGHT_BIT      = 0x00000004;
    按钮背光亮
private static final int KEYBOARD_BRIGHT_BIT    = 0x00000008;
    键盘背光亮
private static final intBATTERY_LOW_BIT        = 0x00000010;
    电池电量低
SCREEN_OFF    : 全部灭掉
SCREEN_DIM    : 只有屏幕暗色
SCREEN_BRIGHT : 屏幕和屏幕背光亮
SCREEN_BUTTON_BRIGHT : 屏幕和按钮亮
ALL_BRIGHT    : 全部都亮

设置屏幕超时时间:

PowerManagerService中的 setScreenOffTimeoutsLocked 函数.

屏幕休眠过程:
1.任何输入事件会调用PowerManagerService的 userActivity函数来设置一段时间内电源的状态以及屏幕状态, 改函数会调用 setTimeoutLocked来设置屏幕为SCREEN_BRIGH. setTimeoutLocked会在原来超时值的基础上加上屏幕超时时间(mKeylightDelay), 等待SCREEN_BRIGH超时后判断屏幕暗色时间(mDimDelay)是否大于0, 若是则设置屏幕为SCREEN_DIM. 等SCREEN_DIM超时后设置SCREEN_OFF来关闭整个屏幕亮度.
  总的来说屏幕调度过程是:

SCREEN_BRIGH --> SCREEN_DIM --> SCREEN_OFF -->  close
                     mKeylightDelay      mDimDelay          mScreenOffDelay

当设置POKE_LOCK_SHORT_TIMEOUT标志时: mKeylightDelay = 6s 其他时间为0
当设置POKE_LOCK_MEDIUM_TIMEOUT标志时: mKeylightDelay = 15s 其他时间为0
其他时: 
mKeylightDelay = 6s, 
mDimDelay = screen_off_timeout - mKeylightDelay - LONG_DIM_TIME(7s);
mScreenOffDelay = LONG_DIM_TIME(7);

也就是说系统全亮持续时间为6s, 大部分都是屏幕和背光亮,暗屏持续时间为7s.

updateLightsLocked : 最终更新亮度配置,  背光亮度控制设备有: lcd, 按钮和键盘!

关闭系统屏保:
mKeyguardManager= (KeyguardManager)getSystemService(Context.KEYGUARD_SERVICE);
mKeyguardLock= mKeyguardManager.newKeyguardLock("");
mKeyguardLock.disableKeyguard();

KeyguardManager只是负责WindowsManager服务中锁相关的一个接口类.

disableKeyguard需要的权限: DISABLE_KEYGUARD,DevicePolicyManager中密码检查。

==========================================================================

TokenWatcher 辅助类,帮助管理IBinder成员引用计数,主要通过acquire 和 release来绑定和释放IBinder成员, 并且判断从无到有或者从有到无时调用抽象成员acquire 和 release来通知子类事件的发生。 该类继承java.lang.Object类, 可使用wait和notify锁机制。

mKeyguardTokenWatcher 是WindowManagerService.java文件中的一个TokenWatcher子类对象。当禁用锁时调用 mPolicy.enableKeyguard(false), 当使能锁时调用mPolicy.enableKeyguard(true)。 只要有一个IBinder禁止使用锁的话,android的锁屏界面就不会出来。 当锁屏界面在的时候,mKeyguardDisabled=false, 当禁用锁屏界面时mKeyguardDisabled=true.

WindowManagerService的 disableKeyguard和reenableKeyguard方法就是通过mKeyguardTokenWatcher变量控制锁屏和解锁屏的。锁屏还涉及到设备策略管理的状态,接受到设备状态变化的广播(DevicePolicyManager.ACTION_DEVICE_POLICY_MANAGER_STATE_CHANGED)时,会锁屏。

PolicyManager 策略管理抽象类,静态函数, 通过"com.android.internal.policy.impl.Policy"类名查找相应的策略类,对于手机来说路径为frameworks/policies/base/phone/com/android/internal/policy/impl/Policy.java 中的类。可以创建 PhoneWindow, PhoneLayoutInflater, PhoneWindowManager三个类对象出来。

在WindowManagerService中的 mPolicy.enableKeyguard实际调用到了 PhoneWindowManager中的enableKeyguard, 继而调用KeyguardViewMediator中的setKeyguardEnabled方法。

输入事件流程:
preprocessEvent
   -->  mPolicy.preprocessInputEventTq  处理滑盖等事件,返回true则终止往下执行
   -->  mPolicy.interceptKeyTq 返回动作:睡眠,到用户,到界面,什么都不干。
   -->  睡眠  mPowerManager.goToSleep, 受mStayOnConditions变量影响
   -->  界面  mPowerManager.userActivity 
        --> 若屏幕关着,则返回
        --> setPowerState 和 setTimeoutLocked(time, SCREEN_BRIGHT)
        --> mPolicy.userActivity(取消锁,并等待超时锁)

interceptKeyTq: 判断屏幕是否亮以及锁是否存在执行不同的操作。
   如果屏锁着并且亮着,则传递给用户
   如果屏锁着但没亮着,不传递给用户并判断是否唤醒屏幕。如果能唤醒的话则准备好锁界面,isWakeKeyWhenKeyguardShowing 这个函数是硬编码排除一些键的唤醒屏幕功能。
   若果屏不锁且灭着,  1)电话中并是音量键则不传递用户,直接控制音量
                   2)若是唤醒键则传递给用户界面(ACTIVITY)
           3)默认传递给用户
   如果屏不锁且亮, 默认传递给用户
==================================继续往下执行================
   如果输入的是挂机和电源键则处理一些通话事件,电源键按下时若屏亮则检测是否为长按事件并且该事件不传递给用户,否则什么都不做。  若果屏亮着按下电源键则进入睡眠状态(ACTION_GO_TO_SLEEP).
   如果输入的是一些媒体键并且不是传递给用户的,则发送广播!
   处理电话接口的一些事件(接听,振铃静音等)
查询屏幕状态可使用如下方法:
   mPowerManager.isScreenOn();
   mPowerManager.isScreenBright();
   mKeyguardMediator.isShowingAndNotHidden();// 屏幕亮的话用这个方法
   mKeyguardMediator.isShowing());  // 屏幕灭的话用这个方法

Android屏幕相关设置的更多相关文章

  1. Android studio相关设置及实现存在于工程目录中的视频播放

    一:相关设置 1:主题设置 File-->Settings-->Appearance &Behavior-->Appearance-->THeme 2:Java源码的颜 ...

  2. React native 之设置IOS的图标,名称和启动图(下篇文章会讲到RN的android的相关设置)

    1.首先,app的名称: 如图所示:我的工程名叫BOOk 在BOOk下面的info.plist的文件里设置app的相关信息:比如Bundle name就是设置APP的名称 2.App的图标:(这里注意 ...

  3. Android屏幕相关的概念

    1. 屏幕尺寸 实际的物理尺寸,作为屏幕的对角线测量. 为简单起见,安卓所有的实际屏幕尺寸为四个广义的大小:小,正常,大,和特大. 2. 屏幕密度 一个屏幕的物理区域内像素的数量:通常称为DPI(每英 ...

  4. Android 图片文件操作、屏幕相关、.9图片的理解

     一:Android图片操作 1.存储bitmap到本地文件系统 public static void bitmapToFile(Bitmap bitmap, String uri) { if(!ex ...

  5. Android屏幕亮度调节相关源码

    如下代码内容是关于Android屏幕亮度调节相关的代码. public static boolean isAutoBrightness(ContentResolver aContentResolver ...

  6. JIRA 知多少:聊一聊 Android Studio 、工作流相关设置

    Android Studio 相关 配置 JIRA 服务器 如果细心的话会发现有一个选项卡:Commit Message.这一段代码是不是有点熟悉呢?你没有猜错,这段代码就是 commit 模板,当你 ...

  7. 使用VIRTUALBOX安装ANDROID系统 | 图文教程 | 相关设置

    使用VIRTUALBOX安装ANDROID系统 | 图文教程 | 相关设置 http://icaoye.com/virtualbox-run-android/

  8. 关于在Safari浏览器中将网页添加到主屏幕的相关设置(自定义图标,启动动画,自定义名称)

    在ios中我们可以使用Safari浏览自带的将网页添加到主屏幕上,让我们的web页面看起来像native那样 第一步: 第二步: 第三步: 到这里还没结束:我们还要进行相关设置才能使我们的应用更像原生 ...

  9. 【分享】迅为iTOP4412开发板-Android系统屏幕旋转设置

    1.1概述 Android4.0,Androd4.4源代码能够编译成手机模式和平板模式,讯为iTop4412 开发平台 的Android系统默认编译为平板模式.客户须要依据自己的产品设计及应用环境,切 ...

随机推荐

  1. OpenGL+VS2013+WIN7(64)组态

    1.下载windows在下面glut安装文件:http://www.opengl.org/resources/libraries/glut/glutdlls37beta.zip 2. 拆开发现五个文件 ...

  2. 使用 C# 进行 Outlook 2003 编程

    原文:使用 C# 进行 Outlook 2003 编程 摘要: 本文介绍了 Microsoft Outlook 2003 对象模型介,并探讨了如何使用 C# 编程语言生成 Outlook 识别的应用程 ...

  3. C# 文件下载类

    using System; using System.Net; using System.IO; using System.Text; using System.Web; using System.W ...

  4. CSS3 实现六边形Div图片展示效果

    原文:CSS3 实现六边形Div图片展示效果 效果图: 实现原理: 这个效果的主要css样式有: 1.>transform: rotate(120deg); 图片旋转 2.>overflo ...

  5. Android多媒体-MediaRecorder 录制音视频

    不多说,直接上代码,有具体凝视 MyAudioRecord.java import java.io.File; import java.io.IOException; import android.a ...

  6. Spring.Net+NHibenate+Asp.Net Mvc+Easyui框架

    Spring.Net+NHibenate+Asp.Net Mvc+Easyui框架 初次接触Spring.Net+NHibenate+Asp.Net Mvc+Easyui框架,查阅了相关资料,了解了框 ...

  7. ibatis提示Unable to load embedded resource from assembly "Entity.Ce_SQL.xml,Entity".

    原本以为是xml文件配置错误,尝试无果,最终原因未将xml文件的生成操作选择为嵌入的资源.很无语!

  8. MVC 控制器激活

    MVC 控制器激活 ASP.NET MVC 控制器激活(三) 前言 在上个篇幅中说到从控制器工厂的GetControllerInstance()方法来执行控制器的注入,本篇要讲是在GetControl ...

  9. [Java]利用拦截器和自定义注解做登录以及权限验证

    1.自定义注解 需要验证登录的注解 package com.etaofinance.wap.common; import java.lang.annotation.Documented; import ...

  10. AJAX 表单提交 文件上传

    1. AJAX = 异步 JavaScript 和 XML. AJAX 是一种用于创建快速动态网页的技术.通过在后台与服务器进行少量数据交换,AJAX 可以使网页实现异步更新.这意味着可以在不重新加载 ...