锐单电子商城 , 一站式电子元器件采购平台!
  • 电话:400-990-0325

Android开发者指南-方位传感器-Position Sensor

时间:2022-09-22 11:30:01 两轴磁传感器android设备传感器相关

Android 该平台提供地磁传感器和方向传感器两种传感器来检测设备的方向。 Android 该平台还提供了一种传感器,用于检测屏幕表面与其它物体的相邻性,称为距离传感器。 基于硬件的地磁传感器和距离传感器。地磁传感器式和桌面设备都内置了地磁传感器。手持式设备通常内置距离传感器,用于检测与人脸的接近程度(如通话时)。 方向传感器是基于软件的,其数据来自加速度传感器和地磁传感器。

注意:自 Android 2.2 (API Level 8) 方向传感器已过时。

方向传感器用于确定设备相对于地球的物理方向。例如,您可以使用地磁传感器和加速度传感器来确定设备相对于北极点的方向。 您还可以使用方向传感器(或基于传感器的类似方法)来确定设备相对于您自己参考系的方向。 方向传感器通常不用于监测设备的运动,如振动、倾斜和冲击(详见)运动传感器)。

地磁传感器和方向传感器SensorEvent以多维数组表示的传感器数据中返回。 例如,方向传感器在传感器事件中提供了三个坐标轴的地磁强度。 同样,方向传感器在事件中也给出了方位角(侧倾)、俯仰度和翻滚度。

请参考传感器使用的坐标系传感器坐标系。 事件中距离传感器给出的是值。 1列出了 Android 所有方向传感器都由平台支持。

表 1.Android 平台支持方向传感器

传感器

传感器事件中的数据

说明

计量单位

SensorEvent.values[0]

x 轴的地磁强度

μT

SensorEvent.values[1]

y 轴的地磁强度

SensorEvent.values[2]

z 轴的地磁强度

SensorEvent.values[0]

侧倾 z 轴的角度)

SensorEvent.values[1]

俯仰度(包围 x 轴的角度)

SensorEvent.values[2]

滚动(围绕 y 轴的角度)

SensorEvent.values[0]

与物体的距离2

cm

1此传感器在 Android 2.2 (API Level 8) 它已经过时了。传感器框架为检测设备的方向提供了替代方法,请参见使用方向传感器。

2有些距离传感器只提供二进制的距离值。

方向传感器用于监测设备相对于地球的方向(实际上是地球磁场)。以下代码显示了如何获得缺失方向传感器的例子:

privateSensorManagermSensorManager;privateSensormSensor;...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()方法将方向值转换为应用程序自定义参考系的坐标。

以下例程展示了如何直接向方向传感器请求方向数据。我们建议你只在设备翻滚度可以忽略时才使用这种方式。

publicclassSensorActivityextendsActivityimplementsSensorEventListener{privateSensorManagermSensorManager;privateSensormOrientation;@OverridepublicvoidonCreate(BundlesavedInstanceState){super.onCreate(savedInstanceState);setContentView(R.layout.main);mSensorManager=(SensorManager)getSystemService(Context.SENSOR_SERVICE);mOrientation=mSensorManager.getDefaultSensor(Sensor.TYPE_ORIENTATION);}@OverridepublicvoidonAccuracyChanged(Sensorsensor,intaccuracy){// 执行传感器精度变化后的一些相关工作/// 本回调方法的代码}必须实现@OverrideprotectedvoidonResume(){super.onResume();mSensorManager.registerListener(this,mOrientation,SensorManager.SENSOR_DELAY_NORMAL);}@OverrideprotectedvoidonPause(){super.onPause();mSensorManager.unregisterListener(this);}@OverridepublicvoidonSensorChanged(SensorEventevent){floatazimuth_angle=event.values[0];floatpitch_angle=event.values[1];floatroll_angle=event.values[2];// 利用这些方向角度执行工作}}

除了用应用程序定制参考系进行坐标转换外,您通常不需要处理或过滤方向传感器的数据。Accelerometer Play示例显示了如何将加速度传感器数据转换为其他参考系统坐标的过程;方向传感器也可以使用类似的技术来完成转换。

地磁传感器可以监测地球磁场的变化。以下代码显示了如何获得缺失的地磁传感器的例子:

privateSensorManagermSensorManager;privateSensormSensor;...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()侧倾和地磁倾角数据是根据这些矩阵数据获得的。

距离传感器允许您检测设备与物体之间的距离。以下代码显示了如何获得缺失距离传感器的例子:

privateSensorManagermSensorManager;privateSensormSensor;...mSensorManager=(SensorManager)getSystemService(Context.SENSOR_SERVICE);mSensor=mSensorManager.getDefaultSensor(Sensor.TYPE_PROXIMITY);

距离传感器通常用于确定用户头部与手持设备屏幕表面的距离(比如,用户拨打或接听电话时)。 大部分距离传感器返回绝对距离,单位是 cm,但有些传感器只能返回远近度值。 以下代码显示了距离传感器的使用:

publicclassSensorActivityextendsActivityimplementsSensorEventListener{privateSensorManagermSensorManager;privateSensormProximity;@OverridepublicfinalvoidonCreate(BundlesavedInstanceState){super.onCreate(savedInstanceState);setContentView(R.layout.main);// 以传感器设备为例,并使用它获得特定的传感器mSensorManager=(SensorManager)getSystemService(Context.SENSOR_SERVICE);mProximity=mSensorManager.getDefaultSensor(Sensor.TYP_PROXIMITY);}@OverridepublicfinalvoidonAccuracyChanged(Sensorsensor,intaccuracy){// 在这里进行一些传感器精度改变后的处理}@OverridepublicfinalvoidonSensorChanged(SensorEventevent){floatdistance=event.values[0];// 处理当前的传感器数据}@OverrideprotectedvoidonResume(){// 注册一个传感器侦听器super.onResume();mSensorManager.registerListener(this,mProximity,SensorManager.SENSOR_DELAY_NORMAL);}@OverrideprotectedvoidonPause(){// 请在 activity 暂停时确保注销传感器super.onPause();mSensorManager.unregisterListener(this);}}

注意: 某些距离传感器返回的是代表远近程度的二进制数值。 这种情况下,传感器通常把最大量程表示为“远”,小于量程的值则为“近”。 “远”值典型为> 5 cm,但这因传感器而异。 你可以用getMaximumRange() 方法来确定传感器的最大量程。

锐单商城拥有海量元器件数据手册IC替代型号,打造电子元器件IC百科大全!

相关文章