settings设置

在Android的Settings-> Display中有Orientation这一设置项。当选中时,屏幕会随设备旋转。

settings设置是在文件SoundAndDisplaySettings.java中,该项对应的键字符串为:

private

static

finalString KEY_ACCELEROMETER ="accelerometer";

其默认值保存在xml文件中,默认是Enable。UI程序初始化时会根据其值是否在复选框中打勾(代码在onCreate函数中):

1.

protected

voidonCreate(Bundle savedInstanceState) {

2.…

3.mAccelerometer = (CheckBoxPreference) findPreference(KEY_ACCELEROMETER);

4.mAccelerometer.setPersistent(false);

5.…

6.}

当用户改变了该值时,会保存起来:

1.public

booleanonPreferenceTreeClick(PreferenceScreen preferenceScreen, Preference preference) {

2.…

3.}else

if(preference == mAccelerometer) {

4.Settings.System.putInt(getContentResolver(),

5.Settings.System.ACCELEROMETER_ROTATION,

6.mAccelerometer.isChecked() ?1:0);

7.…

8.}

frameworks/policies/base/phone/com/android/internal/policy/impl/PhoneWindowManager.java中的SettingsServer会随时监控其值,对用户设置做出反应:

1.public

voidupdate() {

2.ContentResolver resolver = mContext.getContentResolver();

3.

booleanupdateRotation =false;

4.

synchronized(mLock) {

5.…

6.

intaccelerometerDefault = Settings.System.getInt(resolver,

7.Settings.System.ACCELEROMETER_ROTATION, DEFAULT_ACCELEROMETER_ROTATION);

8.

if(mAccelerometerDefault != accelerometerDefault) {

9.mAccelerometerDefault = accelerometerDefault;

10.updateOrientationListenerLp();

11.}

12.…

13.}

G-sensor屏幕旋转

WindowOrientationListener

frameworks/base/core/java/android/view/WindowOrientationListener.java中会监听Sensor的值,对旋转方向进行判断,然后调用抽象方法onOrientationChanged,因此,只要在子类Listener中重新实现这个函数即可对四个不同方向做出响应 。

PhoneWindowManager

frameworks/base/policy/src/com/android/internal/policy/impl/PhoneWindowManager.java有个Listener

MyOrientationListener

mOrientationListener

MyOrientationListener  继承了WindowOrientationListener类

它会根据Sensor判别出的旋转方向,调用WindowManagerService::setRotation让屏幕进行旋转。

class MyOrientationListener extends WindowOrientationListener {               MyOrientationListener(Context context) {                super(context);           }

@Override         public void onOrientationChanged(int rotation) {            // Send updates based on orientation value

if (localLOGV) Log.v(TAG, "onOrientationChanged, rotation changed to " +rotation);             try {

mWindowManager.setRotation(rotation, false,                        mFancyRotationAnimation);             } catch (RemoteException e) {                // Ignore             }           }                                              }

MyOrientationListener mOrientationListener;

当应用程序显示禁止屏幕旋转时则不会旋转,见函数PhoneWindowManager ::needSensorRunningLp()。

最后通过代码来实现自动屏幕旋转这个功能

先判断是否打开:

需要导入的包为:import android.provider.Settings;

在还得在manifest里面设置android:configChanges="orientation|keyboardHidden"

android:screenOrientation="user"

并且要加上权限:

android.permission.WRITE_SETTINGS

代码为:

int flag =Settings.System.getInt(context.getContentResolver(),Settings.System.ACCELEROMETER_ROTATION, 0);

打开关闭,关闭打开:

Settings.System.putInt(context.getContentResolver(),Settings.System.ACCELEROMETER_ROTATION,flag==1?0:1);

android 屏幕方向监听,android 屏幕旋转问题 - jwzhangjie的个人空间 - 51Testing软件测试网 51Testing软件测试网-软件测试人的精神家园...相关推荐

  1. android 屏幕方向监听,Android如何监听屏幕旋转

    背景 关于个人,前段时间由于业务太忙,所以一直没有来得及思考并且沉淀点东西:同时组内一个个都在业务上能有自己的思考和总结,在这样的氛围下,不由自主的驱使周末开始写点东西,希望自己除了日常忙于业务,可以 ...

  2. Android屏幕触摸监听,Android在Fragment中实现监听触摸事件

    本文给大家介绍的是监听Fragment的触摸事件实现.如果大家有更好的机制,可以留言交流,下面来看看详细的介绍: 大家都知道,我们的activity中有onTouchEvent方法,可以用来实现触摸事 ...

  3. android 键盘隐藏监听,Android监听键盘显示和隐藏

    问题概况:横板cocos2dx游戏,点击输入框弹出键盘时,界面要求跟随网上平易,不能挡住输入框.这种问题只出现在非全屏键盘到情况下. 方案1:mainActivity重写onconfiguration ...

  4. android edittext 光标监听,Android EditText监听器,用于光标位置更改

    我有一个EditText对话框. EditText在创建时已经填充.当用户将光标放置在文本的特定部分或其附近时,Toast将弹出. 我的问题是监听光标位置的变化.另一个post提出同样的问题,并且接受 ...

  5. android底层按键监听,Android应用中Back键的监听及处理实例

    MainActivity如下: package cn.testnbackpressed; import android.os.Bundle; import android.view.KeyEvent; ...

  6. android edittext的监听,android editText 监听事件

    在软键盘中注意 在监听的 edittext中 使用android:imeOptions属性的时候,一定要对EditText设置 android:inputType 或者 设置 android:sing ...

  7. android触摸滑动监听,Android 滑动监听的实例详解

    Android 滑动监听的实例详解 摘要: ScollBy,ScollTo是对内容的移动,view.ScollyBy是对view的内容的移动 view,ScollTo是对内容的移动(移动到指定位置), ...

  8. android gridview滑动监听,Android GridView 滑动条设置一直显示状态(推荐)

    Android GridView 滑动条设置一直显示状态(推荐) 模拟GridView控件: android:id="@+id/picture_grid" android:layo ...

  9. android 界面切换监听,Android切换页面--setContentView

    setContentView 一般切换页面,通过Intent,startActivity可以实现,但系统创建Activity是非常耗时的,如果对切换画面时间有要求,只能用setContentView在 ...

最新文章

  1. CentOS6.5-源码编译安装最新MySQL5.7.10
  2. python中文版界面-python设置中文界面实例方法
  3. Collections工具类常用API使用示例
  4. All in All,( UVa, 10340 )
  5. matlab曲线拟合 最低点,Matlab曲线拟合 最小二乘法 polyfit【转】
  6. C# 面向对象之多态
  7. [转]NopCommerce 多数据库方案
  8. VB6 mysql二进制读取,vb6关于VB以二进制(binary)方式读取文本内容
  9. Linux解压bz2文件的方法
  10. TCP数据的传输过程
  11. jeb 高级教程之动态调试
  12. Linux CentOS 内核编译全流程:从安装vmware开始
  13. 计算机专业权威期刊投稿经验总结
  14. 【pkgs.org】linux/uinx依赖包源网站推荐+如何添加该网站到debian源
  15. 问卷星 php,问卷星API介绍
  16. 解决软件提示错误0xc000007b
  17. titan rtx怎么样
  18. 5G射频室内测试的关键技术
  19. OpenGL集锦(1)-安装与概述
  20. 生成Android平台签名证书(.keystore)

热门文章

  1. 第一个案例实操——WordCount
  2. Hive(三)——数据定义
  3. linux异构内存,Linux内核添加异构内存管理(HMM)将带来加速GPU的新方式,还有可能带来其他类型的机器学习硬件。...
  4. 谱减法matlab程序_从零开始的matlab学习笔记——(2)基本运算
  5. python连接池框架_python3.0 django mysql连接池说明
  6. php上传虚假图片,解决PHP上传多个图片并校验的代码问题
  7. Codeforces Round #629 (Div. 3) A~C
  8. NLP+词法系列(二)︱中文分词技术简述、深度学习分词实践(CIPS2016、超多案例)
  9. [spring]spring boot项目实例
  10. Penn Treebank Tags做点小翻译 (下篇)