表 1.. Android 平台支持的运动传感器。

参考API 文档:http://developer.android.com/reference/android/hardware/Sensor.html#TYPE_GYROSCOPE

传感器

传感器事件数据

说明

测量单位

TYPE_ACCELEROMETER

SensorEvent.values[0]

沿 x 轴的加速度(包括重力)。

m/s2

SensorEvent.values[1]

沿 y 轴的加速度(包括重力)。

SensorEvent.values[2]

沿 z 轴的加速度(包括重力)。

TYPE_GRAVITY

SensorEvent.values[0]

沿 x 轴的重力加速度。

m/s2

SensorEvent.values[1]

沿 y 轴的重力加速度。

SensorEvent.values[2]

沿 z 轴的重力加速度。

TYPE_GYROSCOPE

SensorEvent.values[0]

围绕 x 轴的旋转角速度。

rad/s

SensorEvent.values[1]

围绕 y 轴的旋转角速度。

SensorEvent.values[2]

围绕 z 轴的旋转角速度。

TYPE_LINEAR_ACCELERATION

SensorEvent.values[0]]

沿 x 轴的加速度(不包括重力)。

m/s2

SensorEvent.values[1]

沿 y 轴的加速度(不包括重力)。

SensorEvent.values[2]

沿 z 轴的加速度(不包括重力)。

TYPE_ROTATION_VECTOR

SensorEvent.values[0]]

旋转向量沿 x 轴的部分(x * sin(θ/2))。

无无

SensorEvent.values[1]

旋转向量沿 y 轴的部分(y * sin(θ/2))。

SensorEvent.values[2]]

旋转向量沿 z 轴的部分(z * sin(θ/2))。

SensorEvent.values[3]]

旋转向量的数值部分((cos(θ/2))1

 



1 数值部分是可选的。



在Android2.3 gingerbread系统中,google提供了11种传感器供应用层使用。 



1 #define SENSOR_TYPE_ACCELEROMETER       1 //加速度
 2 #define SENSOR_TYPE_MAGNETIC_FIELD      2 //磁力
 3 #define SENSOR_TYPE_ORIENTATION         3 //方向
 4 #define SENSOR_TYPE_GYROSCOPE           4 //陀螺仪
 5 #define SENSOR_TYPE_LIGHT               5 //光线感应
 6 #define SENSOR_TYPE_PRESSURE            6 //压力
 7 #define SENSOR_TYPE_TEMPERATURE         7 //温度
 8 #define SENSOR_TYPE_PROXIMITY           8 //接近
 9 #define SENSOR_TYPE_GRAVITY             9 //重力
10 #define SENSOR_TYPE_LINEAR_ACCELERATION 10//线性加速度
11 #define SENSOR_TYPE_ROTATION_VECTOR     11//旋转矢量



 



图 1. 旋转向量传感器的坐标系。



java 获取温湿度传感 java传感器数据采集_#define

关键类和接口

  1. Sensor
  2. SensorEvent
  3. SensorManager
  4. SensorEventListener

在Android中开发传感器十分简单,只需下面三步:

1、调用Context的getSystemService(Context.SENSOR_SERVICE)方法获得传感器管理服务(SensorManager)。

2、调用SensorManager的getDefaultSensor(int type)方法获取指定类型的传感器。

3、一般在onResume()方法中调用SensorManager的registerListener(SensorEventListener listener,Sensor sensor,int rate)注册监听器.该方法三个参数说明如下:

listener:监听传感器事件的监听器。该监听器需要实现SensorEventListener接口。

sensor:传感器对象。

rate:指定获取传感器数据的频率。支持以下几种频率值:

 

下面演示加速度传感器应用,分别以真机和模拟器两种方式测试,两种方式略有差别。

真机:

Activity:



1 package com.home;  
 2   
 3 import android.app.Activity;  
 4 import android.content.Context;  
 5 import android.hardware.Sensor;  
 6 import android.hardware.SensorEvent;  
 7 import android.hardware.SensorEventListener;  
 8 import android.hardware.SensorManager;  
 9 import android.os.Bundle;  
10 import android.widget.TextView;  
11   
12 public class AccelerometerActivity extends Activity implements  
13         SensorEventListener {  
14     // 定义系统的传感器管理服务  
15     private SensorManager sensorManager;  
16     private TextView showText;  
17   
18     @Override  
19     protected void onCreate(Bundle savedInstanceState) {  
20         super.onCreate(savedInstanceState);  
21         setContentView(R.layout.main);  
22         showText = (TextView) findViewById(R.id.main_tv_show);  
23         // 获取系统的传感器管理服务  
24         sensorManager = (SensorManager) getSystemService(Context.SENSOR_SERVICE);  
25     }  
26   
27     @Override  
28     protected void onResume() {  
29         super.onResume();  
30         // 为系统的加速度传感器注册监听器  
31         sensorManager.registerListener(this,  
32                 sensorManager.getDefaultSensor(Sensor.TYPE_ACCELEROMETER),  
33                 SensorManager.SENSOR_DELAY_GAME);  
34     }  
35   
36     @Override  
37     protected void onStop() {  
38         // 取消注册  
39         sensorManager.unregisterListener(this);  
40         super.onStop();  
41     }  
42   
43     // 当传感器精度改变时回调该方法  
44     @Override  
45     public void onAccuracyChanged(Sensor sensor, int accuracy) {  
46     }  
47   
48     // 当传感器的值发生改变时回调该方法  
49     @Override  
50     public void onSensorChanged(SensorEvent event) {  
51         if (event.sensor.getType() == Sensor.TYPE_ACCELEROMETER) {  
52             float[] values = event.values;  
53             StringBuffer sb = new StringBuffer();  
54             sb.append("X轴上的加速度:" + values[0] + "\n");  
55             sb.append("Y轴上的加速度:" + values[1] + "\n");  
56             sb.append("Z轴上的加速度:" + values[2] + "\n");  
57             showText.setText(sb.toString());  
58         }  
59     }  
60   
61 }



布局文件只有一个TextView,在此省略。