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系统默认编译为平板模式.客户须要依据自己的产品设计及应用环境,切 ...
随机推荐
- centos下mysql 最新版最终成功安装!备份一下几个关键地方
我本来仅仅是为了搭建简单的LAMP环境,亲自己主动手,却发现有这么多的问题会发生.(by default7#zbphp.com) 非常多地方给的安装Mysql的提示是通过yum一键安装.shell命令 ...
- 如何让Gridview在没有数据的时候显示表头(asp.net)
原文:如何让Gridview在没有数据的时候显示表头(asp.net) 1.前言 当对GridView控件进行数据绑定时,如果绑定的记录为空,网页上就不显示GridView,造成页面部分空白,页面布局 ...
- Android小应用-----画画板
public class MainActivity extends Activity { private ImageView iv; float startX = 0; float startY = ...
- 浅析 JavaScript 中的 函数 currying 柯里化
原文:浅析 JavaScript 中的 函数 currying 柯里化 何为Curry化/柯里化? curry化来源与数学家 Haskell Curry的名字 (编程语言 Haskell也是以他的名字 ...
- 收集整理的非常有用的PHP函数
原文:收集整理的非常有用的PHP函数 项目中经常会需要一些让人头疼的函数,作为开发者应该整理一个自己的函数库,在需要之时复制过来即可.本文作者收集整理数十个PHP项目中常用的函数,保证能正常运行,你只 ...
- Grub启动配置文件
和许多其他linux发行版一样,Fedora使用Grub作为32位和64位X86系统的启动加载器(bootloader).grub的配置文件主要是/boot/grub/grub.conf,而/boot ...
- 告别alert,拥抱console
记得学习javascript的第一个demo就是alert("Hello World");可是学习接触javascript这么长时间了还是在alert,因为javascript调 ...
- leetcode第25题--Remove Element
problem: Given an array and a value, remove all instances of that value in place and return the new ...
- 《Visual Studio Magazine》2013年读者选择奖—界面框架类
好消息!2013 Visual Studio Magazine读者选择奖已经正式揭晓了!据了解,截至今年此奖项已经评选了21次,非常值得.NET开发人员信赖和参考.此次评选共有400多个产品角逐28个 ...
- 异步陷阱之IO
异步陷阱之IO篇 很多教程和资料都强调流畅的用户体验需要异步来辅助,核心思想就是保证用户前端的交互永远有最高的优先级,让一切费时的逻辑通通放到后台,等到诸事完备,通知一下前端给个提示或者继续下一步.随 ...