Android屏幕相关设置
锁屏设置:
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屏幕相关设置的更多相关文章
- Android studio相关设置及实现存在于工程目录中的视频播放
一:相关设置 1:主题设置 File-->Settings-->Appearance &Behavior-->Appearance-->THeme 2:Java源码的颜 ...
- React native 之设置IOS的图标,名称和启动图(下篇文章会讲到RN的android的相关设置)
1.首先,app的名称: 如图所示:我的工程名叫BOOk 在BOOk下面的info.plist的文件里设置app的相关信息:比如Bundle name就是设置APP的名称 2.App的图标:(这里注意 ...
- Android屏幕相关的概念
1. 屏幕尺寸 实际的物理尺寸,作为屏幕的对角线测量. 为简单起见,安卓所有的实际屏幕尺寸为四个广义的大小:小,正常,大,和特大. 2. 屏幕密度 一个屏幕的物理区域内像素的数量:通常称为DPI(每英 ...
- Android 图片文件操作、屏幕相关、.9图片的理解
一:Android图片操作 1.存储bitmap到本地文件系统 public static void bitmapToFile(Bitmap bitmap, String uri) { if(!ex ...
- Android屏幕亮度调节相关源码
如下代码内容是关于Android屏幕亮度调节相关的代码. public static boolean isAutoBrightness(ContentResolver aContentResolver ...
- JIRA 知多少:聊一聊 Android Studio 、工作流相关设置
Android Studio 相关 配置 JIRA 服务器 如果细心的话会发现有一个选项卡:Commit Message.这一段代码是不是有点熟悉呢?你没有猜错,这段代码就是 commit 模板,当你 ...
- 使用VIRTUALBOX安装ANDROID系统 | 图文教程 | 相关设置
使用VIRTUALBOX安装ANDROID系统 | 图文教程 | 相关设置 http://icaoye.com/virtualbox-run-android/
- 关于在Safari浏览器中将网页添加到主屏幕的相关设置(自定义图标,启动动画,自定义名称)
在ios中我们可以使用Safari浏览自带的将网页添加到主屏幕上,让我们的web页面看起来像native那样 第一步: 第二步: 第三步: 到这里还没结束:我们还要进行相关设置才能使我们的应用更像原生 ...
- 【分享】迅为iTOP4412开发板-Android系统屏幕旋转设置
1.1概述 Android4.0,Androd4.4源代码能够编译成手机模式和平板模式,讯为iTop4412 开发平台 的Android系统默认编译为平板模式.客户须要依据自己的产品设计及应用环境,切 ...
随机推荐
- linux c socket programming
原文:linux c socket programming http://54min.com/post/http-client-examples-using-c.html 好文章 PPT http:/ ...
- 错 'Cannot run program "/home/uv/IDE/adt/sdk/platform-tools/adb": error=2, No such file or directory
为linux平台搭建android开发环境的人,您可能会遇到问题,如下面有: 64位置linux安装64位置eclipse和64位置jdk开场后eclipse错误后 ""Canno ...
- hdu149850 years, 50 colors (多个最小顶点覆盖)
50 years, 50 colors Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) ...
- javascript 控制台输出 图片 console.log 真强大 真佩服你们的创造力
无意中,在百度知道页面发现了这货.居然能输出图片到控制台. 完全颠覆自己的三观,果断查阅其输出方法.后得知,原来如此. 曾经做过的项目中,同事把控制台做成一个网页形式方便远程控制和远程调用.没想到过这 ...
- ORA-00265: instance recovery required, cannot set ARCHIVELOG mode
症状: 我打开后归档命令报告运行错误ORA-00265 SQL> alter database archivelog; alter database archivelog * ERROR at ...
- 快速构建Windows 8风格应用6-GridView数据控件
原文:快速构建Windows 8风格应用6-GridView数据控件 本篇博文主要介绍什么是GridView数据控件.如何构建常用的GridView数据呈现样式. 什么是GridView数据控件? G ...
- EventBus(事件总线)
EventBus(事件总线) Guava在guava-libraries中为我们提供了事件总线EventBus库,它是事件发布订阅模式的实现,让我们能在领域驱动设计(DDD)中以事件的弱引用本质对我们 ...
- MVC 分页1 标准的url分页
一. 将mvcpager ddl 引用到web服务项目中. 二. 在view加入 <%@ Import Namespace="Webdiyer.WebControls.Mvc" ...
- C# TextBox实现全选
A. 设置全局变量: 1.定义了个全局变量放本次点击的textbox的名字,默认为空. 2.textbox的Enter事件里SelectAll()一下 3.Click事件里判断全局变量是否是该text ...
- JS获取字符串实际长度
JS中默认中文字符长度和其它字符长度计算方法是一样的,但某些情况下我们需要获取中文字符串的实际长度,代码如下: function strLength(str) { var realLength = 0 ...