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<Sensor> 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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值