Android传感器简单介绍

来源:互联网 发布:开票软件金税盘打不开 编辑:程序博客网 时间:2024/06/05 18:42

Android手机中存在好多种传感器,Android系统提供了接口可以将传感器的数据传送给我们,我们可以用获取到的数据做很多有趣的事,接下来我们就来学习一下最常用的三种传感器,光照传感器、加速度传感器和
方向传感器。


传感器的使用方法几乎都是差不多的,我们只需要学会了一种使用方法,那就基本可以去按同样的方式去使用其他的传感器。

一、光照传感器

1、获得传感器管理类实例

sensorManager = (SensorManager) getSystemService(Context.SENSOR_SERVICE);

2、得到光照传感器的实例

Sensor lightSensor = sensorManager.getDefaultSensor(Sensor.TYPE_LIGHT);

3、获得传感器监听实例

SensorEventListener lightListener = new SensorEventListener() {   //当传感器检测数据发生改变时调用   @Override   public void onSensorChanged(SensorEvent event) {       //values数组中的第一个元素即为光照值       float[] values = event.values;       lightLevel.setText("当前光照" + values[0] + "lx");   }   //当传感器的精度发生改变时调用   @Override   public void onAccuracyChanged(Sensor sensor, int accuracy) {   }};

4、设置传感器监听

//为传感器添加监听,参数依次为监听实例、传感器实例,数据更新速率sensorManager.registerListener(lightListener, lightSensor, SensorManager.SENSOR_DELAY_NORMAL);

5、在onDestroy中取消监听

@Overrideprotected void onDestroy() {   super.onDestroy();   if (sensorManager != null){       sensorManager.unregisterListener(lightListener);   }}
二、加速度传感器

我们利用加速度传感器接口可以获得手机在x、y、z方向上的加速度。我们先介绍一下对于手机来说的x、y、z的方向。
这里写图片描述

同时我们应该注意,由于地心引力的存在,我们的手机始终会在某个方向受到一个9.8的重力加速度,如图中所示放置手机,z轴会受到一个9.8的重力加速度。

1、首先获得加速度传感器的实例

Sensor acceleratorSensor = sensorManager.getDefaultSensor(Sensor.TYPE_ACCELEROMETER);

2、为传感器添加监听

sensorManager.registerListener(acceleratorListener, acceleratorSensor, SensorManager.SENSOR_DELAY_NORMAL);

3、在onDestroy()中取消监听

@Overrideprotected void onDestroy() {   super.onDestroy();   if (sensorManager != null){     sensorManager.unregisterListener(acceleratorListener);   }}

在监听函数中和光照传感器类似,会获得一个values数组,数组中的前三个元素依次为x、y、z轴的加速度值。

三、方向传感器

在手机中,方向传感器算是比较常用的一种传感器,它可以准确给出手机在各个方向旋转的角度,利用这些数据我们可以制作出指南针等一些 有用的工具。但是不同于前面的传感器的用法,方向传感器的用法略有不同,Android废弃了以前提供的一种类似于上面的那种直接获取方向旋转数据的方法,提倡使用加速度传感器的数据和地磁传感器的数据结合获取计算出方向传感器的数据。下面给出使用方法。

1、获得传感器管理类的实例

sensorManager = (SensorManager) getSystemService(Context.SENSOR_SERVICE);

2、获得加速度传感器和地磁传感器的实例

Sensor acceleratorSensor = sensorManager.getDefaultSensor(Sensor.TYPE_ACCELEROMETER);Sensor magneticSensor = sensorManager.getDefaultSensor(Sensor.TYPE_MAGNETIC_FIELD);

3、获得传感器监听类实例

SensorEventListener listener =  new SensorEventListener() {//存放加速度传感器的值float[] acceleratorValues = new float[3];//存放地磁传感器的值float[] magneticValues = new float[3];@Overridepublic void onSensorChanged(SensorEvent event) {    //判断当前是加速度传感器还是地磁传感器    if (event.sensor.getType() == Sensor.TYPE_ACCELEROMETER){        //注意:赋值时使用clone()方法,不然两个数组会指向同一个实例        acceleratorValues = event.values.clone();    }else if (event.sensor.getType() == Sensor.TYPE_MAGNETIC_FIELD){        magneticValues = event.values.clone();    }    //存放计算出的旋转数据    float[] R = new float[9];    //存放方向传感器围绕z、x、y旋转的弧度值    float[] values = new float[3];    //第二个参数为将地磁向量转化为重力坐标的旋转矩阵    SensorManager.getRotationMatrix(R, null, acceleratorValues, magneticValues);    SensorManager.getOrientation(R, values);    acceleratorLevel.setText("X: " + acceleratorValues[0] + "\n" + "Y: " + acceleratorValues[1] + "\n" + "Z: " + acceleratorValues[2]);    magneticLevel.setText("Z: " + values[0] + "\n" + "X: " + values[1] + "\n" + "Y: " + values[2]);

注:上面中values中存放的数据是旋转的弧度值,如果需要转化为角度值需要调用Math.toDegrees(values[0])

4、为传感器设置监听

sensorManager.registerListener(listener, acceleratorSensor, SensorManager.SENSOR_DELAY_GAME);sensorManager.registerListener(listener, magneticSensor, SensorManager.SENSOR_DELAY_GAME);

5、在onDestroy()方法中取消监听注册

@Overrideprotected void onDestroy() {    super.onDestroy();    if (sensorManager != null){       sensorManager.unregisterListener(listener);    }}

以上就是Android中常见的传感器的简单使用方法。

0 0