Android传感器应用

概述

Android Sensor Framework为应用程序提供了下面几个类和接口

  • SensorManager
    为你提供一个sensor service的实例,它能够为了提供多种服务(查询sensor数量,注册/卸载sensor事件监听函数,获取sensor精度、速率、校准等信息)
  • Sensor
    指向一个具体sensor的实例,调用方法获取配置和数据.
  • SensorEvent
    指向一个sensor事件对象的信息,包含了传感器的数值,设备类型,精度,事件的时间戳等.
  • SensorEventListener
    可以创建两个接收通知函数,一个是当sensor数据变化时,一个是当sensor精度变化时被调用.

应用程序调用sensor相关的API主要用来完成两件事

  • 获取sensor种类以及每种sensor的属性
  • 监控sensor数据

下面制作一个简单的apk,列出手机上所有传感器,然后将所关心的那个传感器数据显示出来.

测试程序

获取传感器列表,读取数据代码

//get sensor manager
mSensorManager = (SensorManager)getSystemService(Context.SENSOR_SERVICE);

//show sensor list
List sensors = mSensorManager.getSensorList(Sensor.TYPE_ALL);
System.out.println("get sensor list:");
for (Sensor s: sensors) {
    System.out.println("name:" + s.getName());
    System.out.println("string_type:" + s.getStringType());
    System.out.println("vendor:" + s.getVendor());
}

//gyro
Sensor mGyroSensor = mSensorManager.getDefaultSensor(Sensor.TYPE_GYROSCOPE);
if (mGyroSensor == null) {
    System.out.println("gyro sensor is null.");
    mViewGyro.setText("gyro sensor is null.");
}
mSensorManager.registerListener(new SensorEventListener() {
    long last_ts = 0;
    @Override
    public void onSensorChanged(SensorEvent sensorEvent) {
        String string = "sensor_gyro=(" + new DecimalFormat("0.00").format(sensorEvent.values[0]) + "," + new DecimalFormat("0.00").format(sensorEvent.values[1]) + "," + new DecimalFormat("0.00").format(sensorEvent.values[2]) + ")\nts=" + sensorEvent.timestamp  + "\ninterval=" + (sensorEvent.timestamp - last_ts)/1000/1000 + "ms";
        last_ts = sensorEvent.timestamp;
        //System.out.println(string);
        mViewGyro.setText(string);
    }
    @Override
    public void onAccuracyChanged(Sensor sensor, int i) {
        System.out.println("onAccuracyChanged.");
    }
},mGyroSensor,sample_type);

上面是获取传感器数据示例代码,工程里添加了一个利用RotationVector来旋转方块的代码,具体见工程文件

测试结果

传感器数据

旋转方块

参考资料

sensor_overview
RotationVectorDemo

你可能感兴趣的:(Android)