概述
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来旋转方块的代码,具体见工程文件
测试结果
传感器数据
旋转方块