Android学习-传感器的使用

来源:互联网 发布:自学编程 知乎 编辑:程序博客网 时间:2024/05/22 10:32

Android中的MEMS传感器有很多种,本节主要介绍其中几种使用方法。

要获取传感器的数值需要两个类:
android.hardware.SensorManager
android.hardware.Sensor

接口需要:
android.hardware.SensorEventListener

假如我定义

private SensorManager mSensorManager;private Sensor mAccelerometer;

使用之前需要在Activity的onCreate()方法里

mSensorManager = (SensorManager) getSystemService(SENSOR_SERVICE);mAccelerometer = mSensorManager.getDefaultSensor(Sensor.TYPE_ACCELEROMETER);

其中Sensor有很多常量

TYPE_ALL:所有的传感器
TYPE_ACCELEROMETER:加速度计
TYPE_AMBIENT_TEMPERATURE:环境温度
TYPE_GAME_ROTATION_VECTOR:未校准的旋转矢量传感器
TYPE_GEOMAGNETIC_ROTATION_VECTOR:地磁旋转矢量传感器
TYPE_GRAVITY:重力传感器
TYPE_GYROSCOPE:陀螺仪
TYPE_GYROSCOPE_UNCALIBRATED未校准的陀螺仪
TYPE_HEART_BEAT:运动检测传感器
TYPE_HEART_RATE:心率传感器
TYPE_LIGHT:光照强度传感器
TYPE_LINEAR_ACCELERATION:线性加速度计
TYPE_MAGNETIC_FIELD:磁场传感器
TYPE_MAGNETIC_FIELD_UNCALIBRATED:未校准的磁场传感器
TYPE_MOTION_DETECT:运动检测传感器
TYPE_ORIENTATION:方向传感器,在API8中已弃用
TYPE_POSE_6DOF:具有6个自由度的姿势传感器
TYPE_PRESSURE:压力传感器
TYPE_PROXIMITY:距离传感器
TYPE_RELATIVE_HUMIDITY:相对湿度传感器
TYPE_ROTATION_VECTOR:旋转矢量传感器
TYPE_SIGNIFICANT_MOTION:重要运动触发传感器
TYPE_STATIONARY_DETECT:静止状态传感器
TYPE_STEP_COUNTER:计步计数器
TYPE_STEP_DETECTOR:计步检测器

PS:部分Android设备可能没有一部分传感器


需要该Activity实现SensorEventListener接口

SensorEventListener接口有两个方法

//该方法是监听传感器数值变化的,event里面储存当前传感器的信息public void onSensorChanged(SensorEvent event);//该方法监听加传感器的精度变化的,一般不需要,只需要在log中打印日志public void onAccuracyChanged(Sensor sensor, int accuracy);

然后重写onResume()onPause()方法用来开启监听和注销监听

@Overrideprotected void onResume() {    super.onResume();    mSensorManager.registerListener(this, mAccelerometer,SensorManager.SENSOR_DELAY_NORMAL);}@Overrideprotected void onPause() {    super.onPause();    mSensorManager.unregisterListener(this);}

重写onSensorChangedonAccuracyChanged方法

@Overridepublic void onSensorChanged(SensorEvent event) {    //event.values数组是传感器的各种值    Log.d("MainActivity", "value:" + event.values[0]);}@Overridepublic void onAccuracyChanged(Sensor sensor, int accuracy) {    //accuracy是精度值    Log.d("MainActivity", "accuracy:" + accuracy);}

附上加速度传感去的整篇Activity源码

package xiaoyao.vicp.mems;import android.hardware.Sensor;import android.hardware.SensorEvent;import android.hardware.SensorEventListener;import android.hardware.SensorManager;import android.os.Bundle;import android.support.v7.app.AppCompatActivity;import android.util.Log;public class MainActivity extends AppCompatActivity implements SensorEventListener {    private SensorManager mSensorManager;    private Sensor mAccelerometer;    @Override    protected void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        setContentView(R.layout.activity_main);        init();    }    private void init() {        mSensorManager = (SensorManager) getSystemService(SENSOR_SERVICE);        mAccelerometer = mSensorManager.getDefaultSensor(Sensor.TYPE_ACCELEROMETER);    }    @Override    protected void onResume() {        super.onResume();        mSensorManager.registerListener(this, mAccelerometer, SensorManager.SENSOR_DELAY_NORMAL);    }    @Override    protected void onPause() {        super.onPause();        mSensorManager.unregisterListener(this);    }    @Override    public void onSensorChanged(SensorEvent event) {        Log.d("MainActivity", "X:" + event.values[0]);        Log.d("MainActivity", "Y:" + event.values[1]);        Log.d("MainActivity", "Z:" + event.values[2]);    }    @Override    public void onAccuracyChanged(Sensor sensor, int accuracy) {        Log.d("MainActivity", "精度:" + accuracy);    }}

运行截图
运行Log截图

1 0