android 屏幕方向监听,android 屏幕旋转问题 - jwzhangjie的个人空间 - 51Testing软件测试网 51Testing软件测试网-软件测试人的精神家园...
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软件测试网-软件测试人的精神家园...相关推荐
- android 屏幕方向监听,Android如何监听屏幕旋转
背景 关于个人,前段时间由于业务太忙,所以一直没有来得及思考并且沉淀点东西:同时组内一个个都在业务上能有自己的思考和总结,在这样的氛围下,不由自主的驱使周末开始写点东西,希望自己除了日常忙于业务,可以 ...
- Android屏幕触摸监听,Android在Fragment中实现监听触摸事件
本文给大家介绍的是监听Fragment的触摸事件实现.如果大家有更好的机制,可以留言交流,下面来看看详细的介绍: 大家都知道,我们的activity中有onTouchEvent方法,可以用来实现触摸事 ...
- android 键盘隐藏监听,Android监听键盘显示和隐藏
问题概况:横板cocos2dx游戏,点击输入框弹出键盘时,界面要求跟随网上平易,不能挡住输入框.这种问题只出现在非全屏键盘到情况下. 方案1:mainActivity重写onconfiguration ...
- android edittext 光标监听,Android EditText监听器,用于光标位置更改
我有一个EditText对话框. EditText在创建时已经填充.当用户将光标放置在文本的特定部分或其附近时,Toast将弹出. 我的问题是监听光标位置的变化.另一个post提出同样的问题,并且接受 ...
- android底层按键监听,Android应用中Back键的监听及处理实例
MainActivity如下: package cn.testnbackpressed; import android.os.Bundle; import android.view.KeyEvent; ...
- android edittext的监听,android editText 监听事件
在软键盘中注意 在监听的 edittext中 使用android:imeOptions属性的时候,一定要对EditText设置 android:inputType 或者 设置 android:sing ...
- android触摸滑动监听,Android 滑动监听的实例详解
Android 滑动监听的实例详解 摘要: ScollBy,ScollTo是对内容的移动,view.ScollyBy是对view的内容的移动 view,ScollTo是对内容的移动(移动到指定位置), ...
- android gridview滑动监听,Android GridView 滑动条设置一直显示状态(推荐)
Android GridView 滑动条设置一直显示状态(推荐) 模拟GridView控件: android:id="@+id/picture_grid" android:layo ...
- android 界面切换监听,Android切换页面--setContentView
setContentView 一般切换页面,通过Intent,startActivity可以实现,但系统创建Activity是非常耗时的,如果对切换画面时间有要求,只能用setContentView在 ...
最新文章
- CentOS6.5-源码编译安装最新MySQL5.7.10
- python中文版界面-python设置中文界面实例方法
- Collections工具类常用API使用示例
- All in All,( UVa, 10340 )
- matlab曲线拟合 最低点,Matlab曲线拟合 最小二乘法 polyfit【转】
- C# 面向对象之多态
- [转]NopCommerce 多数据库方案
- VB6 mysql二进制读取,vb6关于VB以二进制(binary)方式读取文本内容
- Linux解压bz2文件的方法
- TCP数据的传输过程
- jeb 高级教程之动态调试
- Linux CentOS 内核编译全流程:从安装vmware开始
- 计算机专业权威期刊投稿经验总结
- 【pkgs.org】linux/uinx依赖包源网站推荐+如何添加该网站到debian源
- 问卷星 php,问卷星API介绍
- 解决软件提示错误0xc000007b
- titan rtx怎么样
- 5G射频室内测试的关键技术
- OpenGL集锦(1)-安装与概述
- 生成Android平台签名证书(.keystore)
热门文章
- 第一个案例实操——WordCount
- Hive(三)——数据定义
- linux异构内存,Linux内核添加异构内存管理(HMM)将带来加速GPU的新方式,还有可能带来其他类型的机器学习硬件。...
- 谱减法matlab程序_从零开始的matlab学习笔记——(2)基本运算
- python连接池框架_python3.0 django mysql连接池说明
- php上传虚假图片,解决PHP上传多个图片并校验的代码问题
- Codeforces Round #629 (Div. 3) A~C
- NLP+词法系列(二)︱中文分词技术简述、深度学习分词实践(CIPS2016、超多案例)
- [spring]spring boot项目实例
- Penn Treebank Tags做点小翻译 (下篇)