Android的常用传感器开发教程案例

1、加速度传感器Accelerometer

加速度传感器主要感应手机的运动,在注册了传感器监听器后加速度传感器主要捕获3个参数values[0]、values[1]、values[2]。

values[0]:空间坐标系中x轴方向上的加速度减去重力加速度减去中立加速度在x轴上的分量。

values[1]:空间坐标系中x轴方向上的加速度减去重力加速度减去中立加速度在y轴上的分量。

values[2]:空间坐标系中x轴方向上的加速度减去重力加速度减去中立加速度在z轴上的分量。

上述3个数据的单位均为米每二次方秒。

距离说明:

当手机平放到桌面静止时,加速度为重力加速度g,通过0减去-g(重力加速度g方向为z轴反方向,故为负值)得到values[2]为g。

如果把手机水平方向右推,此时手机x方向上的加速度为正,即values[0]为正。

当把手机以a米每二次方秒的加速度竖值向上举时,values[2]的返回值为(a+g)米每二次方秒,通过a减去-g得到。

2、 方向传感器Orientation

方向传感器主要感应手机方位的变化,其每次读取的都是静态的状态值,在注册了传感器监听器后方向传感器主要捕获3个参数values[0]、values[1]、values[2],关于三个角度的说明如下:

第一个角度:表示手机顶部朝向与正北方向的夹角。当手机绕着Z轴旋转时,该角度值发生改变。

第二个角度:表示手机顶部或尾部翘起的角度,当手机绕着X轴倾斜时,该角度值发生变化。

第三个角度:表示手机左侧或右侧翘起的角度。当手机绕着Y轴倾斜时,该角度值发生变化。

3、磁场传感器Magnetic Field

磁场传感器主要用于感应周围的磁感应强度。即使周围没有任何直接的磁场,手机设备也始终会处于地球磁场中。随着手机状态设备摆放状态的改变,周围磁场在手机的X、Y、Z方向上的会发生改变。

磁场传感器传感器会返回三个数据,三个数据分别代表周围磁场分解到X、Y、Z三个方向上的磁场分量。磁场数据的单位是微特斯拉(uT)。

4、光传感器Light

光传感器用于感应周围的光强,注册监听器后只捕获一个参数:values[0]。该参数代表周围的光照强度,单位为勒克斯(lux)。

5、温度传感器Temperature

温度传感器用于获取手机设备所处环境的温度。温度传感器会返回一个数据,该数据代表手机设备周围的温度,单位是摄氏度。

6、压力传感器 Pressure

压力传感器用于获取手机设备所处环境的压力的大小。压力传感器会返回一个数据,代表手机设备周围的压力大小。

------------------------------------------------------------------------------------------------------------------------------------------

关于手机传感器的介绍,我就不多讲了,具体你们可以去网上搜一搜就知道了,

其他话就不多说,直接切入正题了,先给大家看看程序运行后的效果图吧:

Android的常用传感器开发教程案例_第1张图片

 

具体代码实现如下了:

主布局文件就不贴出来了,太简单了,是不是?

<<<如果想要main_activity.xml的代码,可以去文章最下面的github链接里下载回来就可以了>>>

MainActivity.java关键代码入下:

 package com.yaowen.sensorbigtest;
//............这里省略了n行代码
public class MainActivity extends AppCompatActivity implements SensorEventListener {
    //............这里省略了n行代码    
   @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        //初始化UI控件
        //............这里省略了n行代码
        // 获取真机的传感器管理服务
        // sensorManager = (SensorManager) getSystemService(Context.SENSOR_SERVICE);
        // 获取传感器模拟器的传感器管理服务
        sensorManager = (SensorManager) getSystemService(Context.SENSOR_SERVICE);

    }
    @Override
    protected void onResume() {
        super.onResume();
        // 为系统的方向传感器注册监听器
        sensorManager.registerListener(this,
                sensorManager.getDefaultSensor(Sensor.TYPE_ORIENTATION),
                SensorManager.SENSOR_DELAY_GAME);
        // 为系统的磁场传感器注册监听器
        sensorManager.registerListener(this,
                sensorManager.getDefaultSensor(Sensor.TYPE_MAGNETIC_FIELD),
                SensorManager.SENSOR_DELAY_GAME);
        // 为系统的温度传感器注册监听器
        sensorManager.registerListener(this,
                sensorManager.getDefaultSensor(Sensor.TYPE_TEMPERATURE),
                //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);
    }
//............这里省略了n行代码
    @Override
    protected void onDestroy() {
        // 程序销毁时取消注册传感器监听器
        sensorManager.unregisterListener(this);
        super.onDestroy();
    }
    @Override
    public void onSensorChanged(SensorEvent event) {
        float[] values = event.values;
        // // 真机上获取触发event的传感器类型
        // Sensor sensorType = event.sensor;
        // 模拟器上获取触发event的传感器类型
        Sensor sensorType = event.sensor;
        StringBuilder sb = null;
        sb = new StringBuilder();
        // 判断是哪个传感器发生改变
        //方向传感器
        if (sensorType == sensorManager.getDefaultSensor(Sensor.TYPE_ORIENTATION)) {
            sb.append("绕Z轴转过的角度:");
            sb.append(values[0]);
            sb.append("绕X轴转过的角度:");
            sb.append(values[1]);
            sb.append("绕Y轴转过的角度:");
            sb.append(values[2]);
            etOrientation.setText(sb.toString());
        }
        //光照传感器
        if (sensorType == sensorManager.getDefaultSensor(Sensor.TYPE_LIGHT)) {
            sb.append("当前光的强度为:");
            sb.append(values[0]);
            etLight.setText(sb.toString());
        }
        //磁场传感器
        if (sensorType == sensorManager.getDefaultSensor(Sensor.TYPE_MAGNETIC_FIELD)) {
            sb.append("X方向上的角度:");
            sb.append(values[0]);
            sb.append("Y方向上的角度:");
            sb.append(values[1]);
            sb.append("Z方向上的角度:");
            sb.append(values[2]);
            etMagnetic.setText(sb.toString());
        }
        //温度传感器
        if (sensorType == sensorManager.getDefaultSensor(Sensor.TYPE_TEMPERATURE)) {
            sb.append("当前温度为:");
            sb.append(values[0]);
            etTemerature.setText(sb.toString());
        }
        //压力传感器
        if (sensorType == sensorManager.getDefaultSensor(Sensor.TYPE_PRESSURE)) {
            sb.append("当前压力为:");
            sb.append(values[0]);
            etPressure.setText(sb.toString());
        }
    }
   //............这里省略了n行代码
}

 代码就这么多,已经贴完了。大家可以试试看咯。

github源代码如下:https://github.com/yaowen613/SensorBigTest.git

 

你可能感兴趣的:(传感器,sensor,SensorManager,Android传感器,传感器开发)