传感器(十二)

      传感器
1.SensorManager
 1.sensorManager = (SensorManager) getSystemService(SENSOR_SERVICE);数组

2.光照传感器
 1.Sensor sensor = sensorManager.getDefaultSensor(Sensor.TYPE_LIGHT);
    sensorManager.registerListener(mySensorEventListener,sensor, SensorManager.SENSOR_DELAY_NORMAL);
 2.咱们所须要的数据就是存放在 SensorEvent的 values 数组get

3.加速度传感器
 1.Sensor sensor = sensorManager.getDefaultSensor(Sensor.TYPE_ACCELEROMETER);
 2.加速度传感器输出的信息一样也是存放在 SensorEvent 的 values 数组中的,只不过此时的 values 数组中会有三个值, 分别表明手机在  X 轴、 Y 轴和 Z轴方向上的加速度信息。io


4.方向传感器
 1.不推荐写法:Sensor sensor = sensorManager.getDefaultSensor(Sensor.TYPE_ORIENTATION);
 values[0]记录着手机围绕 Z轴的旋转角度,
 values[1] 记录着手机围绕 X轴的旋转角度,
 values[2] 记录着手机围绕 Y 轴的旋转角度List

 1.推荐写法:事实上,Android 获取手机旋转的方向和角度是经过加速度传感器和地磁传感器共同计算得出的,这也是 Android目前推荐使用 的方式。
 Sensor accelerometerSensor = sensorManager.getDefaultSensor(Sensor.TYPE_ACCELEROMETER);
 Sensor magneticSensor = sensorManager.getDefaultSensor(Sensor.TYPE_MAGNETIC_FIELD);
 sensorManager.registerListener(listener, accelerometerSensor,SensorManager.SENSOR_DELAY_GAME);
 sensorManager.registerListener(listener, magneticSensor,SensorManager.SENSOR_DELAY_GAME);
 因为方向传感器的精确度要求一般都比较高, 这里咱们把传感器输出信息的更新速率提升了一些,使用的是 SENSOR_DELAY_GAME。
 接下来在 onSensorChanged()方法中能够获取到 SensorEvent 的 values 数组,分别记录着
 加速度传感器和地磁传感器输出的值。而后将这两个值传入到 SensorManager 的
 getRotationMatrix()方法中就能够获得一个包含旋转矩阵的 R 数组,以下所示:
 SensorManager.getRotationMatrix(R, null, accelerometerValues, magneticValues);
 其中第一个参数 R 是一个长度为 9 的 float 数组,getRotationMatrix()方法计算出的旋转
 数据就会赋值到这个数组当中。 第二个参数是一个用于将地磁向量转换成重力坐标的旋转矩
 阵,一般指定为 null 便可。第三和第四个参数则分别就是加速度传感器和地磁传感器输出的
 values 值。
 获得了 R数组以后,接着就能够调用 SensorManager 的 getOrientation()方法来计算手机
 的旋转数据了,以下所示:
 SensorManager.getOrientation(R, values);
 values 是一个长度为 3 的 float数组, 手机在各个方向上的旋转数据都会被存放到这个数
 组当中。其中 values[0]记录着手机围绕着图 12.3中 Z轴的旋转弧度,values[1]记录着手机围
 绕 X 轴的旋转弧度,values[2]记录着手机围绕 Y 轴的旋转弧度。
 注意这里计算出的数据都是以弧度为单位的, 所以若是你想将它们转换成角度还须要调
 用以下方法:
 Math.toDegrees(values[0]);
 好了,基本的用法就是如此,下面咱们来实际操做一下吧。
float