Android开发者指南-方位传感器-Position Sensor
Android开发者指南-方位传感器-Position Sensor
转载自:http://blog.sina.com.cn/s/blog_48d4913001010zsu.html
Position Sensors
英文原文:http://developer.android.com/guide/topics/sensors/sensors_position.html
版本:Android 4.0 r1 - 08 Mar 2012 0:34
Android 平台提供了两种传感器来检测设备的方位:地磁传感器和方向传感器。 Android 平台还提供了一种传感器,用于检测屏幕表面与其它物体的邻近程度,即被称为距离传感器。 地磁传感器和距离传感器是基于硬件的。大部分手持和桌面设备都内置了地磁传感器。手持设备通常还内置了距离传感器,用于检测与人脸的靠近程度(比如在通话过程中)。 而方向传感器是基于软件的,它的数据来自加速度传感器和地磁传感器。
方位传感器用于确定设备相对地球的物理方位。比如,你可以用地磁传感器和加速度传感器来确定设备相对北极点的方位。 你还可以用方向传感器(或类似的基于传感器的判断方向的方法)来确定设备相对你自己参照系的方位。 方位传感器通常不会用于监测设备的移动情况,诸如震动、倾斜、冲击(详见 运动传感器)。
地磁传感器和方向传感器在 SensorEvent 中返回以多维数组表示的传感器数据。 比如,方向传感器在传感器事件中提供了三个坐标轴方向的地磁强度。 同理,方向传感器还在事件中给出了方位角(侧倾度)、俯仰度和翻滚度。
关于传感器使用的坐标系,请参阅 传感器的坐标系。 距离传感器在事件中给出的是一个值。表 1列出了 Android 平台支持的所有方位传感器。
表 1. Android 平台支持的方位传感器
| 传感器 | 传感器事件中的数据 | 说明 | 计量单位 |
|---|---|---|---|
TYPE_MAGNETIC_FIELD |
SensorEvent.values[0] |
x 轴的地磁强度 | μT |
SensorEvent.values[1] |
y 轴的地磁强度 | ||
SensorEvent.values[2] |
z 轴的地磁强度 | ||
TYPE_ORIENTATION1 |
SensorEvent.values[0] |
侧倾度(围绕 z 轴的角度) | 度 |
SensorEvent.values[1] |
俯仰度(围绕 x 轴的角度) | ||
SensorEvent.values[2] |
翻滚度(围绕 y 轴的角度) | ||
TYPE_PROXIMITY |
SensorEvent.values[0] |
与物体的距离2 | cm |
使用方向传感器
方向传感器用于监测设备相对地球的方位(其实是地球磁场)。以下代码展示了如何获取缺省的方向传感器的一个实例:
private SensorManager mSensorManager; private Sensor mSensor; ...mSensorManager = (SensorManager) getSystemService(Context.SENSOR_SERVICE);mSensor = mSensorManager.getDefaultSensor(Sensor.TYPE_ORIENTATION);
方向传感器的数据来自设备的地磁传感器和加速度传感器。利用这两种硬件传感器,方向传感器提供了以下三个方向的数据:
- 侧倾度(围绕 z 轴的旋转角)。这是指设备 y 轴与地磁北极间的夹角。例如,如果设备的 y 轴指向地磁北极则该值为 0,如果 y 轴指向南方则该值为 180。 同理,y 轴指向东方则该值为 90,而指向西方则该值为 270。
- 俯仰度(围绕 x 轴的旋转角)。当 z 轴的正值部分朝向 y 轴的正值部分旋转时,该值为正。 当 z 轴的正值部分朝向 y 轴的负值部分旋转时,该值为负。取值范围为 -180 度到 180 度。
- 翻滚度(围绕 y 轴的旋转角)。当 z 轴的正值部分朝向 x 轴的正值部分旋转时,该值为正。 当 z 轴的正值部分朝向 x 轴的负值部分旋转时,该值为负。取值范围为 -90 度到 90 度。
以上定义与航空学上的不同,那里的 X 轴是指飞机的长轴(从机尾至机首)。 并且,由于历史的原因,翻滚度也是以顺时针方向为正(从数学上讲,应该是逆时针方向为正)。
方向传感器的数据是对加速度和地磁传感器的原始数据进行处理之后再报送出来的。 因为处理工作比较繁重,方向传感器的精度和准确度会有所降低(只有在翻滚度为 0 时此传感器的数据才是可靠的)。 因此,方向传感器自 Android 2.2 (API level 8) 开始已经过时了。 作为直接使用方向传感器原始数据的替代方案,我们建议你结合getRotationMatrix() 和 getOrientation() 方法来来计算方向值。你还可以用 remapCoordinateSystem() 方法来把方向值转换为应用程序自定义参照系的坐标。
以下例程展示了如何直接向方向传感器请求方向数据。我们建议你只在设备翻滚度可以忽略时才使用这种方式。
public class SensorActivity extends Activity implements SensorEventListener { private SensorManager mSensorManager; private Sensor mOrientation; @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); mSensorManager = (SensorManager) getSystemService(Context.SENSOR_SERVICE); mOrientation = mSensorManager.getDefaultSensor(Sensor.TYPE_ORIENTATION); } @Override public void onAccuracyChanged(Sensor sensor, int accuracy) { // 执行一些传感器精度变动后的相关工作 // 必须实现本回调方法的代码 } @Override protected void onResume() { super.onResume(); mSensorManager.registerListener(this, mOrientation, SensorManager.SENSOR_DELAY_NORMAL); } @Override protected void onPause() { super.onPause(); mSensorManager.unregisterListener(this); } @Override public void onSensorChanged(SensorEvent event) { float azimuth_angle = event.values[0]; float pitch_angle = event.values[1]; float roll_angle = event.values[2]; // 利用这些方向角度执行工作 } }
通常你不需要对方向传感器的数据进行任何处理或过滤,当然以应用程序自定义参照系进行坐标转换除外。Accelerometer Play 范例展示了如何把加速度传感器数据转换为其它参照系坐标的过程;方向传感器也可以采用类似的技术来完成转换。
使用地磁传感器
地磁传感器使你能监测地球磁场的变化。以下代码展示了如何获取缺省的地磁传感器的一个实例:
private SensorManager mSensorManager; private Sensor mSensor; ...mSensorManager = (SensorManager) getSystemService(Context.SENSOR_SERVICE);mSensor = mSensorManager.getDefaultSensor(Sensor.TYPE_MAGNETIC_FIELD);
此传感器提供了三维坐标轴方向上的原始的磁场强度数据(单位μT)。通常,你不需要直接使用此传感器。 取而代之的是,你可以用旋转向量传感器来测量旋转的原始数据,或者联合使用加速度计、地磁传感器、getRotationMatrix() 方法来获取旋转矩阵和倾角矩阵。然后,你可以通过
a href="http://developer.android.com/reference/android/hardware/SensorManager.html#getOrientation(float[], float[])">getOrientation() 和 getInclination() 根据这些矩阵数据得到侧倾度和地磁倾角数据。
使用距离传感器
距离传感器使你能检测设备距离某物体的远近程度。以下代码展示了如何获取缺省的距离传感器的一个实例:
private SensorManager mSensorManager; private Sensor mSensor; ...mSensorManager = (SensorManager) getSystemService(Context.SENSOR_SERVICE);mSensor = mSensorManager.getDefaultSensor(Sensor.TYPE_PROXIMITY);
距离传感器通常用于确定用户头部与手持设备屏幕表面的距离(比如,用户拨打或接听电话时)。 大部分距离传感器返回的是绝对距离,单位是 cm,但某些传感器只能返回远近程度值。 以下代码展示了距离传感器的使用:
public class SensorActivity extends Activity implements SensorEventListener { private SensorManager mSensorManager; private Sensor mProximity; @Override public final void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); // 获取传感器设备的一个实例,并用它获取某个特定的传感器 mSensorManager = (SensorManager) getSystemService(Context.SENSOR_SERVICE); mProximity = mSensorManager.getDefaultSensor(Sensor.TYPE_PROXIMITY); } @Override public final void onAccuracyChanged(Sensor sensor, int accuracy) { // 在这里进行一些传感器精度改变后的处理 } @Override public final void onSensorChanged(SensorEvent event) { float distance = event.values[0]; // 处理当前的传感器数据 } @Override protected void onResume() { // 注册一个传感器侦听器 super.onResume(); mSensorManager.registerListener(this, mProximity, SensorManager.SENSOR_DELAY_NORMAL); } @Override protected void onPause() { // 请在 activity 暂停时确保注销传感器 super.onPause(); mSensorManager.unregisterListener(this); } }
Android开发者指南-方位传感器-Position Sensor的更多相关文章
- Android开发者指南(9) —— ProGuard
转: 前言 本章内容为开发者指南(Dev Guide)/Developing/Tools/ProGuard,本章内容为"混淆器",版本为Android3.0 r1,翻译来自:&qu ...
- 英特尔 Android* 开发者指南上的对等应用
简单介绍 当没有 Wi-Fi 訪问点或互联网訪问时,Android* 应用可能须要对等连接在两台或多台 Android* 设备之间建立连接. 比方,文件共享应用和多人游戏. 该功能可使用 NFC.蓝牙 ...
- Android开发者指南-用户界面-拖放-Drag and Drop[原创译文]
英文原文:http://developer.android.com/guide/topics/ui/drag-drop.html 版本:Android 4.0 r1 译者注:黄色底色为未决译文 快 ...
- 转 Android开发者指南-Manifest.xml-<supports-screens
<supports-screens> 版本:Android 3.2 语法: <supports-screensandroid:resizeable=["true" ...
- 开源Android容器化框架Atlas开发者指南
Atlas是古希腊神话中的天神,是波士顿动力公司的机器人,借助搜索引擎,得以发现这个名词背后许许多多的含义.在手机淘宝,Atlas是一个扎根于Android客户端的一个组件化容器框架,相比神话中用手和 ...
- Android开发10:传感器器及地图相关应用
前言 啦啦啦~各位小伙伴们好~经过这一学期的Android知识的学习,我们学到了很多和Android开发相关的知识,这一学期的学习也要告一段落了. 一起进入我们今天的相关内容~这次我们将一起学习使用 ...
- Android学习笔记--获取传感器信息
相关资料: 传感器的坐标与读数:http://www.cnblogs.com/mengdd/archive/2013/05/19/3086781.html 传感器介绍及指南针原理:http://www ...
- Android API 指南
原文链接:http://android.eoe.cn/topic/android_sdk Android API 指南 - Android API Guides 应用的组成部分 - Applicati ...
- 《Android学习指南》文件夹
转自:http://android.yaohuiji.com/about Android学习指南的内容分类: 分类 描写叙述 0.学习Android必备的Java基础知识 没有Java基础的朋友,请不 ...
随机推荐
- Percona-toolkit的安装和配置-杨建荣的学习笔记
http://blog.itpub.net/23718752/viewspace-2091818/#rd
- careercup-树与图 4.6
4.6 设计一个算法,找出二叉查找树中指定结点的“下一个”结点(也即中序后继).可以假定每个结点都含有指向父节点的连接. 思路: 有两种情况:1)如果该结点存在右子树,则中序后继即为右子树中最小的结点 ...
- 合并两个vectcor——2013-08-26
vector<int> v1; vector<int> v2; for(int i=0; i<5; i++) { v1.push_back(i); if(i%2==1) ...
- mac 终端中添加tree命令显示文件目录结构
在Ubuntu下,通过 sudo apt-get install tree 可以使用tree命令,显示文件目录列表,如图所示: 在mac OS X系统下怎么使用呢? 在终端输入: cd $home ...
- 【转】Java web 编解码
几种常见的编码格式 为什么要编码 不知道大家有没有想过一个问题,那就是为什么要编码?我们能不能不编码?要回答这个问题必须要回到计算机是如何表示我们人类能够理解的符号的,这些符号也就是我们人类使用的语言 ...
- MFC 设置窗口背景图片
//在Onpaint函数中加入如下代码 //----------给窗口设置背景图片---------------------------- CPaintDC dc(this); CRect myrec ...
- HDU-1060(简单数学)
Leftmost Digit Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others) P ...
- Visual Basic|VB 6.0中文版
附加下载链接:http://xiazai.zol.com.cn/detail/3/29939.shtml?&437886-tsina-1-838-a507c04d8e448a55dd65bfc ...
- 获得服务器硬件信息(CPUID、硬盘号、主板序列号、IP地址等)
1 // 注意:首先要在项目中添加引用 System.Management using System; using System.Collections.Generic; using System.L ...
- 特殊浮点值 Java
// Finite +-0.0 System.out.println("Finite with +-0.0:"); System.out.println("Finite ...