android自动屏幕旋转流程分析.doc

android自动屏幕旋转流程分析

在android设置(Settings)中我们可以看到显示(display)下有一个自动屏幕旋转的checkbox,

如果我们勾选checkbox的话当你手机屏幕就会根据重量自动旋转,那么我们就分析一下这个过程:

在Display_settings.xml文件中我们可以找到:

这是选项框的布局,然后我们到package/app/settings/src/com/android/Settings中的DiaplaySettings.java中去找,

在onCreate方法中,我们发现没有,也没有亮度调节(这个就是博客中自动调节屏幕亮度所讲),不要急,我没继续找,发现在onPreferenceTreeClick方法中有它的影子,

public boolean onPreferenceTreeClick(PreferenceScreen preferenceScreen, Preference preference) { if (preference == mAccelerometer) { Settings.System.putInt(getContentResolver(), Settings.System.ACCELEROMETER_ROTATION, mAccelerometer.isChecked() ? 1 : 0); } return true; }

将选中后值设为1,而在updateState方法中:

mAccelerometer.setChecked(Settings.System.getInt( getContentResolver(), Settings.System.ACCELEROMETER_ROTATION, 0) != 0);

意思就是当我们勾选了之后就将1存到(adb shell 进入)/data/data/viders.settings/databases/settings.db数据库下的system表中:accelerometer_rotation|1。

自动旋转和自动调节屏幕亮度一样是用一个observe来监测数据库中的数据是否发生变化,它在PhoneWindownManager.java中会有

ContentResolver resolver = mContext.getContentResolver();

.......

resolver.registerContentObserver(Settings.System.getUriFor( Settings.System.ACCELEROMETER_ROTATION), false, this);

........

然后就会在PhoneWindownManager.java中的updateSettings()方法中更新:

nt accelerometerDefault = Settings.System.getInt(resolver, Settings.System.ACCELEROMETER_ROTATION, DEFAULT_ACCELEROMETER_ROTATION); if (mAccelerometerDefault != accelerometerDefault) { mAccelerometerDefault = accelerometerDefault; updateOrientationListenerLp(); }

如果accelerometerDefault不等于mAccelerometerDefault也就是不等于0,也就是等于1时,就updateOrientationListenerLp()

在 updateOrientationListenerLp()方法中会调用mOrientationListener.enable(),找到enable方法,实在WindowOrientationListener.ja

android 屏幕旋转流程,android自动屏幕旋转流程分析.doc相关推荐

  1. android禁止屏幕自动旋转_如何禁止屏幕翻转

    Android 版需要修改 AndroidManifest.xml 文件,在文件中找到 android:screenOrientation 属性,原值应该是 user,修改成 portrait 就是锁 ...

  2. android设置自动旋转屏幕,android怎样实现关闭系统自动旋转屏幕时能够自动横竖屏...

    android 系统关闭系统自动旋转屏幕情况下利用设备感应器(方向传感器)实现横竖屏切换 2.SensorManager sm=(SensorManager)getSystemService(SENS ...

  3. android 获取屏幕旋转方向,android获取手机屏幕尺寸和旋转方向

    布局文件main.xml: android:layout_width="fill_parent" android:layout_height="fill_parent&q ...

  4. Android屏幕旋转,android实战项目实例

    ActivityInfo.SCREEN_ORIENTATION_FULL_USER //根据用户选择旋转方向,可以让屏幕旋转180度,和传感器那个很像 sensor 由物理感应器决定显示方向,它取决于 ...

  5. Android运行时动态全屏以及旋转屏幕时不重新装载

    Android运行时动态全屏以及旋转屏幕时不重新装载 最近要做一视频播放器,在横屏时需要用到全屏播放,在网络上搜索"android 全屏",查到的文章全是如何设置全屏,通过them ...

  6. android+相机画面旋转,Android:相机预览的屏幕方向/旋转

    我已经创建了一个相机应用程序,我想让我的应用程序在所有4个可能的方向转换,并相应地更新相机预览.因为我已经使用我从以下复制的以下方法: Android – Camera preview is side ...

  7. android屏幕适配流程,Android屏幕适配姿势

    GitHub地址 为什么要屏幕适配? device_framentation.png 统计 碎片化 品牌机型碎片化 屏幕尺寸碎片化 操作系统碎片化 为了保证用户获得一致的用户体验效果,使得某一元素在A ...

  8. android屏幕唤醒函数,android学习笔记 按电源键屏幕唤醒和屏幕睡眠流程(从上层到kernel)...

    一. 屏幕的唤醒 首先inputread在读取到有keyboard事件上报后,会调用到keydispatch的notifykey,去询问wm是否会对这次按键特殊处理,如果WM不处理,则此处会点亮或者熄 ...

  9. java软件屏幕大小转换,android 用java写一个自动适配各种屏幕大小的工具

    android 用java写一个自动适配各种屏幕大小的工具,假设我当前机器屏幕宽高为1920*1116,我页面某个组件的宽度为100px,那么在1280*800的机器上,按道理将应该是100/1920 ...

最新文章

  1. linux更改程序启动时间,分享|如何改善应用程序在 Linux 中的启动时间
  2. 内蒙古公安原创扫黑除恶主题MV《以警之名》全国首发
  3. Docker教程-使用
  4. [Array]217.Contains Duplicate
  5. cvtcolor python opencv_二值分析 | OpenCV + skimage如何提取中心线
  6. Java11 新特性
  7. NYOJ题目 263 精挑细选
  8. mysql 终端 远程访问,通过终端连接到远程mysql
  9. Python - 装饰器
  10. 设置eclipse自动生成的author等注释
  11. 10 SystemVerilog语言编写SPI发送
  12. linux v4l2进行视频采集编程介绍
  13. 关于AD中如何绘制原理图及其封装
  14. 使用telnet和ssh登录linux
  15. libusb读取鼠标数据
  16. maven的资源过滤filters
  17. 湖南省工信厅党组书记、厅长雷绍业一行莅临麒麟信安调研
  18. 还在用Excel做报表?建议你试试这个数据填报系统_光点科技
  19. IPv6邻居发现协议添加默认路由
  20. BigDecimal如何保留小数位

热门文章

  1. python小白应该看什么书_小白学python看什么书
  2. jwt token注销_退出登录时怎样实现JWT Token失效?
  3. 2017.10.22 诸神眷顾的幻想乡 失败总结
  4. 2017.6.21 大都市meg 思考记录
  5. 【英语学习】【Level 08】U05 Better option L4 Being social
  6. 导数与微分的知识点思维导图_高中生物思维导图知识点总结
  7. python打开csv文件绘制折线图,[转载]python绘制简单折线图
  8. python嵌入shell代码_小白进!嵌入式开发如何快速入门?
  9. vue 如何处理两个组件异步问题_Vue异步组件使用详解
  10. c语言窗口最大化,使用SDL处理最大化的窗口