为了账号安全,请及时绑定邮箱和手机立即绑定

笔记,Android 传感器 Sensor

标签:
Android

在编写传感器相关的代码时可以按照以下步骤:

第一步: 获得传感器管理器 

SensorManger sm = (SensorManager).getSystemService(SENSOR_SERVICE);

第二步:为具体的传感器注册监听器 ,这里我们使用磁阻传感器Sensor.TYPE_ORIENTATION.

sm,registerListener (this,sm.getDefaultSensor(Sensor.TYPE_ORIENTATION), SensorManager.SENSOR_DELAY_FASTEST);

第三个参数值表示获得传感器数据的速度,SENSOR_DELAY_FASTEST表示尽可能快的获取传感器数据,

除了该值以外,还可以设置3个获取 传感器数据的速度值,这些值如 : 

SENSOR_DELAY_GAME 如果利用传感器开发游戏,建议使用该值。 一般大多数实时行较高的游戏使用该级别。 

SENSOR_DELAY_NORMAL 默认的获取传感器数据的速度。标准延迟,对于一般的益智类游戏或者EASY界别的游戏可以使用,但过低的采样率可能对一些赛车类游戏有跳帧的现象。 SENSOR_DELAY_UI 若使用传感器更新UI, 建议使用该值。

 SENSOR_DELAY_FASTEST:最低延迟,一般不是特别灵敏的处理不推荐使用,该模式可能造成手机电力大量消耗,而且由于传递的为大量的原始数据,算法处理不好将会影响游戏逻辑和UI的性能。

 

第三步,既然我们在第二部已经为传感器设置了监听。我们就要实现具体的监听方法,在android 中,应用程序使用传感器主要依赖于   android.hardware.SensorEventListener 接口。该接口可以监听传感器各种事件。SensorEventListener 接口代码如下:

          public interface SensorEventListener {

                 public  void onSensorChanged(SensorEvent event) {

                       }

                   public void onAccuracyChanged(Sensor sensor ,int accuracy ){

                      }

                    

          }

     当传感器的值发生变化时,例如磁阻传感器方向改变时会调用OnSensorChanged(). 当传感器的精度发生变化时会调用OnAccuracyChanged()方法。

传感器的坐标系统

通常情况,传感器框架使用标准的3轴坐标系统来表达数据值。对于大多数传感器,坐标系统是相对与设备被保持在默认方向时的设备的屏幕来定义的(如图1)。当设备被保持在默认方向时,X轴是水平向右、Y轴是垂直向上、Z轴是指向屏幕面板的外部。在这个系统中,背对着屏幕的Z轴坐标是负值。该坐标系统被下列传感器使用:

1.加速度传感器     2.重力传感器 3.陀螺仪 4.线性加速传感器 5.磁力仪

图.传感器API使用的坐标系统。

要理解的最重要的一点是,在设备屏幕的方向发生变化时,坐标系统的各坐标轴不会发生变化,也就是说传感器的坐标系统不会因设备的移动而改变。这种行为与OpenGL坐标系统的行为相同。另外要理解的一点是,应用程序不要假设设备的自然(默认)方向是纵向的。对于很多平板设备的自然方向是横向的。传感器坐标系统总基于设备的自然方向。

磁阻传感器,也使罗盘(俗称指向针)

onSensorChanged(SensorEvent event)   event.value[1,2,3]

values变量的元素在主要的传感器中所代表的含义

1.1方向传感器

在方向传感器中values变量的3个值都表示度数,它们的含义如下:

values[0]:该值表示方位,也就是手机绕着Z轴旋转的角度。0表示北(North);90表示东(East);180表示南(South);270表示西(West)。如果values[0]的值正好是这4个值,并且手机是水平放置,表示手机的正前方就是这4个方向。可以利用这个特性来实现电子罗盘,实例76将详细介绍电子罗盘的实现过程。

values[1]:该值表示倾斜度,或手机翘起的程度。当手机绕着X轴倾斜时该值发生变化。values[1]的取值范围是-180≤values[1]

≤180。假设将手机屏幕朝上水平放在桌子上,这时如果桌子是完全水平的,values[1]的值应该是0(由于很少有桌子是绝对水平的,因此,该值很可能不为0,但一般都是-5和5之间的某个值)。这时从手机顶部开始抬起,直到将手机沿X轴旋转180度(屏幕向下水平放在桌面上)。在这个旋转过程中,values[1]会在0到-180之间变化,也就是说,从手机顶部抬起时,values[1]的值会逐渐变小,直到等于-180。如果从手机底部开始抬起,直到将手机沿X轴旋转180度,这时values[1]会在0到180之间变化。也就是values[1]的值会逐渐增大,直到等于180。可以利用values[1]和下面要介绍的values[2]来测量桌子等物体的倾斜度。

values[2]:表示手机沿着Y轴的滚动角度。取值范围是-90≤values[2]≤90。假设将手机屏幕朝上水平放在桌面上,这时如果桌面是平的,values[2]的值应为0。将手机左侧逐渐抬起时,values[2]的值逐渐变小,直到手机垂直于桌面放置,这时values[2]的值是-90。将手机右侧逐渐抬起时,values[2]的值逐渐增大,直到手机垂直于桌面放置,这时values[2]的值是90。在垂直位置时继续向右或向左滚动,values[2]的值会继续在-90至90之间变化。

1.2加速传感器

    该传感器的values变量的3个元素值分别表示X、Y、Z轴的加速值。例如,水平放在桌面上的手机从左侧向右侧移动,values[0]为负值从右向左移动,values[0]为正值。

1.3重力感应器

1.4 光线传感器

1.5陀螺仪传感器

………

API中定义的几个代表sensor的常量。

Int TYPE_ACCELEROMETER  A constant describing an accelerometer sensor type. 加速度传感器 

int TYPE_ALL   A constant describing all sensor types. 所有类型 A constant describing all sensor types. 

int TYPE_GRAVITY   A constant describing a gravity sensor type. 

int TYPE_GYROSCOPE  A constant describing a gyroscope sensor type 回转仪传感器 

int TYPE_LIGHT  A constant describing an light sensor type.光线传感器 

int TYPE_LINEAR_ACCELERATION  A constant describing a linear acceleration sensor type. 

int TYPE_MAGNETIC_FIELD  A constant describing a magnetic field sensor type.磁场传感器 

int TYPE_ORIENTATION  This constant is deprecated. use SensorManager.getOrientation()instead. 磁场传感器

 

int TYPE_PRESSURE  A constant describing a pressure sensor type 压力计传感器 

int TYPE_PROXIMITY  A constant describing an proximity sensor type.距离传感器 

int TYPE_ROTATION_VECTOR  A constant describing a rotation vector sensor type. 

int TYPE_TEMPERATURE  A constant describing a temperature sensor type 温度传感器 

 float[] getOrientation (float[] R, float[] values)

通过磁场和加速度两个感应器获取方向数据的例子 

http://www.th7.cn/Program/Android/2011/11/09/46519.shtml


--------------华丽的分割线---------------

http://www.jb51.net/article/56989.htm

http://blog.csdn.net/think_soft/article/details/8083780

http://www.th7.cn/Program/Android/2011/11/09/46519.shtml

原文链接:http://www.apkbus.com/blog-328402-58738.html

点击查看更多内容
TA 点赞

若觉得本文不错,就分享一下吧!

评论

作者其他优质文章

正在加载中
  • 推荐
  • 评论
  • 收藏
  • 共同学习,写下你的评论
感谢您的支持,我会继续努力的~
扫码打赏,你说多少就多少
赞赏金额会直接到老师账户
支付方式
打开微信扫一扫,即可进行扫码打赏哦
今天注册有机会得

100积分直接送

付费专栏免费学

大额优惠券免费领

立即参与 放弃机会
意见反馈 帮助中心 APP下载
官方微信

举报

0/150
提交
取消