开发步骤
1、获取SensorManager对象
SensorManager sensorManager = (SensorManager) getSystemService(SENSOR_SERVICE);
2、指定传感器
Sensor sensor = sensorManager.getDefaultSensor(Sensor.TYPE_ORIENTATION)
3、注册监听(SensorEventListener)传感器值
sensorManager.registerListener(this,sensor ,SensorManager.SENSOR_DELAY_GAME) ;
其中第三个参数作用是指定传感器的数据频率,一般有以下几种频率
(1) 最快延迟最小
SensorManager.SENSOR_DELAY_FASTEST
(2)适合游戏的频率,一般有实时的应用要求的可用
SensorManager.SENSOR_DELAY_GAME
(3)正常频率,对实时性要求不高的可用
SensorManager.SENSOR_DELAY_NORMAL
(4) 适合普通用户界面
SensorManager.SENSOR_DELAY_UI
常用的传感器
1、 方向传感器
- 第一个角度,手机顶部朝向与正北方向的夹角,当手机绕着Z轴转动其值会发生改变,
- 第二个角度,表示手机顶部和尾部翘起的角度,当手机绕着X轴转动时该值发生改变,其范围(-180 — 180)
- 第三个角度,表示受手机左侧或右侧翘起角度,范围值-90到90.
2、 陀螺仪传感器
3、 磁场传感器
4、 重力传感器
5、 先行传感器
6、 温度传感器
7、 光感传感器
8、 压力传感器
SensorManager sensorManager ;
private void initSensor() {
sensorManager = (SensorManager) getSystemService(SENSOR_SERVICE);
/*方向传感*/
sensorManager.registerListener(this,sensorManager.getDefaultSensor(Sensor.TYPE_ORIENTATION),SensorManager.SENSOR_DELAY_GAME) ;
/*陀螺仪*/
sensorManager.registerListener(this,sensorManager.getDefaultSensor(Sensor.TYPE_GYROSCOPE),SensorManager.SENSOR_DELAY_GAME) ;
/*磁场*/
sensorManager.registerListener(this,sensorManager.getDefaultSensor(Sensor.TYPE_MAGNETIC_FIELD),SensorManager.SENSOR_DELAY_GAME) ;
/*重力*/
sensorManager.registerListener(this,sensorManager.getDefaultSensor(Sensor.TYPE_GRAVITY),SensorManager.SENSOR_DELAY_GAME) ;
/*线性加速度*/
sensorManager.registerListener(this,sensorManager.getDefaultSensor(Sensor.TYPE_LINEAR_ACCELERATION),SensorManager.SENSOR_DELAY_GAME) ;
/*温度*/
sensorManager.registerListener(this,sensorManager.getDefaultSensor(Sensor.TYPE_AMBIENT_TEMPERATURE),SensorManager.SENSOR_DELAY_GAME) ;
/*光感*/
sensorManager.registerListener(this,sensorManager.getDefaultSensor(Sensor.TYPE_LIGHT),SensorManager.SENSOR_DELAY_GAME) ;
/*压力*/
sensorManager.registerListener(this,sensorManager.getDefaultSensor(Sensor.TYPE_PRESSURE),SensorManager.SENSOR_DELAY_GAME) ;
}
@Override
protected void onResume() {
super.onResume();
}
/**
* 实时输出传感器数据
*
* @param event
*/
@Override
public void onSensorChanged(SensorEvent event) {
/*传感器的值*/
float[] val = event.values;
StringBuffer stringBuffer ;
switch (event.sensor.getType()){
/*方向*/
case Sensor.TYPE_ORIENTATION :
stringBuffer = new StringBuffer();
stringBuffer.append("\n");
stringBuffer.append("val[0] z轴绕过的角度:"+val[0]+"\n");
stringBuffer.append("val[1] x轴绕过的角度:"+val[1]+"\n");
stringBuffer.append("val[2] y轴绕过的角度:"+val[2]+"\n");
Log.v("===============","方向传感="+stringBuffer.toString());
break;
/*陀螺仪*/
case Sensor.TYPE_GYROSCOPE :
stringBuffer = new StringBuffer();
stringBuffer.append("\n");
stringBuffer.append("val[0] x轴绕过的角速度:"+val[0]+"\n");
stringBuffer.append("val[1] y轴绕过的角速度:"+val[1]+"\n");
stringBuffer.append("val[2] z轴绕过的角速度:"+val[2]+"\n");
Log.v("===============","陀螺仪="+stringBuffer.toString());
break;
/*磁场*/
case Sensor.TYPE_MAGNETIC_FIELD :
stringBuffer = new StringBuffer();
stringBuffer.append("\n");
stringBuffer.append("val[0] x磁场度:"+val[0]+"\n");
stringBuffer.append("val[1] y磁场度:"+val[1]+"\n");
stringBuffer.append("val[2] z磁场度:"+val[2]+"\n");
Log.v("===============","磁场="+stringBuffer.toString());
break;
/*重力*/
case Sensor.TYPE_GRAVITY :
stringBuffer = new StringBuffer();
stringBuffer.append("\n");
stringBuffer.append("val[0] x 方向的重力:"+val[0]+"\n");
stringBuffer.append("val[1] y 方向的重力:"+val[1]+"\n");
stringBuffer.append("val[2] z 方向的重力:"+val[2]+"\n");
Log.v("===============","重力="+stringBuffer.toString());
break;
/*线性加速度*/
case Sensor.TYPE_LINEAR_ACCELERATION :
stringBuffer = new StringBuffer();
stringBuffer.append("\n");
stringBuffer.append("val[0] x 线性加速度:"+val[0]+"\n");
stringBuffer.append("val[1] y 线性加速度:"+val[1]+"\n");
stringBuffer.append("val[2] z 线性加速度:"+val[2]+"\n");
Log.v("===============","线性加速度="+stringBuffer.toString());
break;
/*温度*/
case Sensor.TYPE_AMBIENT_TEMPERATURE :
stringBuffer = new StringBuffer();
stringBuffer.append("\n");
stringBuffer.append("val[0] 当前温度:"+val[0]+"\n");
Log.v("===============","当前温度="+stringBuffer.toString());
break;
/*光感*/
case Sensor.TYPE_LIGHT :
stringBuffer = new StringBuffer();
stringBuffer.append("\n");
stringBuffer.append("val[0] 当前光感:"+val[0]+"\n");
Log.v("========当前光感=======","当前光感="+stringBuffer.toString());
break;
/*压力*/
case Sensor.TYPE_PRESSURE :
stringBuffer = new StringBuffer();
stringBuffer.append("\n");
stringBuffer.append("val[0] 当前压力:"+val[0]+"\n");
Log.v("===============","当前压力="+stringBuffer.toString());
break;
}
}
/**
* 传感器精度发生改变时调用
*
* @param sensor
* @param accuracy
*/
@Override
public void onAccuracyChanged(Sensor sensor, int accuracy) {
}