Android学习-传感器的使用

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()方法用来开启监听和注销监听

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

重写onSensorChangedonAccuracyChanged方法

@Override
public void onSensorChanged(SensorEvent event) {
    //event.values数组是传感器的各种值
    Log.d("MainActivity", "value:" + event.values[0]);
}

@Override
public 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
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值