android系统中手机传感器类型的定义
int TYPE_ACCELEROMETER A constant describing an accelerometer sensor type. //三轴加速度感应器 返回三个坐标轴的加速度 单位m/s2
int TYPE_ALL 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. //光线感应器 单位 lux 勒克斯
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 //温度传感器 单位 摄氏度
Android监听传感器事件
要监控传感器的原始数据,你需要实现 SensorEventListener 接口的 onAccuracyChanged() 和onSensorChanged() 回调方法。只要发生以下事件,Android系统就会调用这两个方法:
传感器精度发生变化
在这种情况下,系统会调用 onAccuracyChanged() 方法,并传给你一个发生变化的 Sensor 对象的引用和新的传感器精度值。精度用以下四种状态常量之一来表示: SENSOR_STATUS_ACCURACY_LOW、SENSOR_STATUS_ACCURACY_MEDIUM、 SENSOR_STATUS_ACCURACY_HIGH、 和 SENSOR_STATUS_UNRELIABLE。传感器报送一个新数据
这种情况下,系统会调用 onSensorChanged() 方法,并传给你一个 SensorEvent 对象。 SensorEvent 对象中包含了新数据的相关信息,包括:数据精度、生成数据的传感器、生成数据的时间戳、传感器采到的新数据。
代码示例
在自定义的类中implements SensorEventListener类类
public class MainActivity extends AppCompatActivity
implements NavigationView.OnNavigationItemSelectedListener,SensorEventListener。
mSensorManager = (SensorManager) getSystemService(Context.SENSOR_SERVICE);
mSensor = mSensorManager.getDefaultSensor(Sensor.TYPE_ACCELEROMETER);
获取传感器manager对象,及传感器对象,根据注册的参数类型,在回调函数中返回事件
疑问:SensorEventListener类的Sensor为什么不能像SensorListener
中注册同时监控多个类型的传感器??
sm.registerListener(this,
Sensor.TYPE_ACCELEROMETER |
Sensor.TYPE_MAGNETIC_FIELD |
Sensor.TYPE_ORIENTATION |
Sensor.TYPE_GYROSCOPE |
Sensor.TYPE_LIGHT |
Sensor.TYPE_PRESSURE |
Sensor.TYPE_TEMPERATURE |
Sensor.TYPE_PROXIMITY |
Sensor.TYPE_GRAVITY |
Sensor.TYPE_LINEAR_ACCELERATION |
Sensor.TYPE_ROTATION_VECTOR,
SensorManager.SENSOR_DELAY_NORMAL);
对于继承自Activity的类 需要在其生命周期函数中,加上对监听器的管理
@Override
protected void onResume() {
super.onResume();
boolean supported=mSensorManager.registerListener(this,mSensor,SensorManager.SENSOR_DELAY_NORMAL);
if (!supported) {
mSensorManager.unregisterListener(this);
throw new UnsupportedOperationException(
"Accelerometer not supported");
}
}
@Override
protected void onPause() {
super.onPause();
mSensorManager.unregisterListener(this);
}
@Override
protected void onStop() {
mSensorManager.unregisterListener(this);
super.onStop();
}
同时实现与传感器监听器有关的两个回调函数,自己的相关代码在这里实现:
public void onSensorChanged(SensorEvent event){
if (event.sensor.getType() != Sensor.TYPE_ACCELEROMETER) {
return;
}
String str = "X:" + event.values[0] + ",Y:" + event.values[1] + ",Z:" + event.values[2];
a=Math.sqrt(event.values[0]*event.values[0]
+event.values[1]*event.values[1]
+event.values[2]*event.values[2]);
DataPoint[] values = new DataPoint[1];
values[0] = new DataPoint(x,a);
x++;
series.appendData(values[0], true, 300);
}
@Override
public void onAccuracyChanged(Sensor sensor,int accuracy){
}