原文章
点击打开链接传感器简介
点击打开链接传感器详解及拓展
权限权限
<uses-permission android:name="android.permission.SENSOR_INFO"/>
<!--传感器信息-->
<uses-permission android:name="android.permission.SENSOR_ENABLE"/>
<!--打开传感器-->
声明一个传感器管理类
private SensorManager sensorManager;
实现SensorManager并从中得到加速度传感器
sensorManager=(SensorManager)getSystemService(Context.SENSOR_SERVICE);
Sensor acc_sensor=sensorManager.getDefaultSensor(Sensor.TYPE_ACCELEROMETER);
得到所有传感器的信息的方法
List<Sensor> sensorList = sensorManager.getSensorList(Sensor.TYPE_ALL);
String sensorNameList="传感器个数:"+sensorList.size()+"\r\n";
for (Sensor sensor : sensorList) {
sensorNameList+=sensor.getName()+"\r\n";
}
其余信息
sensor.getName(); //获得传感器名称
sensor.getType(); //获得传感器种类
sensor.getVendor(); //获得传感器供应商
sensor.getVersion(); //获得传感器版本
sensor.getResolution(); //获得精度值
sensor.getMaximumRange(); //获得最大范围
sensor.getPower(); //传感器使用时的耗电量
常用传感器
1. 加速度传感器(重力传感器)TYPE_ACCELEROMETER
2. 陀螺仪传感器TYPE_GYROSCOPE
3. 光传感器TYPE_LIGHT
5. 恒定磁场传感器TYPE_MAGNETIC_FIELD
6. 方向传感器TYPE_ORIENTATION(被废弃,用getOrientation来代替)
7. 恒定的压力传感器TYPE_PRESSURE
8. 接近传感器(距离传感器)TYPE_PROXIMITY
9. 温度传感器TYPE_TEMPERATURE
10.旋转矢量传感器(由其他传感器生成)TYPE_ROTATION_VECTOR
为某个传感器注册事件监听
sensorManager.registerListener(new SensorEventListener() {
@Override
public void onSensorChanged(SensorEvent event) {//传感器的值变化
x=event.values[0];
y=event.values[1];
z=event.values[2];
}
@Override
public void onAccuracyChanged(Sensor sensor, int accuracy) {//精度改变
}
}, acc_sensor, SensorManager.SENSOR_DELAY_GAME);//监听器类型FASTEST,NORMAL
传感器数据的来源是SensorEvent,这个类中有一个values的变量,类型是Float[]
该变量最多有只有三个元素,而且传感器不同,对应元素代表的含义也不同
比如方向传感器中第一个元素是方位角的值,而气压传感器中第一个值则是气压值,加速度传感器则是三位坐标系三个方向的加速度
对应的参数:传感器对象,传感器管理对象,传感器的延时精度,有四个可选值:
- SENSOR_DELAY_FASTEST——延时:0ms
- SENSOR_DELAY_GAME——延时:20ms
- SENSOR_DELAY_UI——延时:60ms
- SENSOR_DELAY_NORMAL——延时:200ms
为某个传感器取消事件监听
sensorManager.unregisterListener();