原文章
点击打开链接传感器简介
点击打开链接传感器详解及拓展
权限权限
<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();