传感器的应用开发
先贴几个地址
http://www.oschina.net/question/163910_28354这里面介绍了11中传感器。
http://www.oschina.net/question/12_1593 这里面比较详细的介绍了如何使用传感器。
我们都知道智能机中都含有或多或少的传感器,比较常见的是加速度传感器,姿态传感器,重力传感器等等。
我们需要为手机进行有关传感器方面的额编程,首先就是要获得各种传感器采样得到的数值。
Android系统中每当某个传感器的数值发生了变化,就会相应产生一个事件,这样,我们就可以实现一个监听器,从而对事件进行操作。
1、首先利用getSystemService这个函数获取一个SensorManager的对象,该对象用于对应于传感器的管理类,可以理解成所有传感器的集合。
2、之后再使用SensorManager的getDefaultSensor方法获取一个具体的Sensor对象。(比如说加速度传感器,重力传感器等等)
3、注册传感器的监听器。
4、取消注册传感器监听器。
下面的代码尝试获得手机所处环境的总加速度。
public class TempTest_sensorActivity extends Activity {
private SensorManager sensormanager;
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
sensormanager = (SensorManager)getSystemService(Context.SENSOR_SERVICE); //获取传感器服务需要向下转型
Sensor sensor = sensormanager.getDefaultSensor(Sensor.TYPE_ACCELEROMETER); //获取加速度传感器
//下面注册监听器,第一个参数是监听器对象,第二个参数是需要监听的传感器对象,第三个表示传感器的采样率(一个int型)。
sensormanager.registerListener(new SensorEventListener() {
@Override
public void onSensorChanged(SensorEvent event) {
float x = event.values[0]; //values[o]表示x方向的加速度大小
float y = event.values[1]; //values[1]表示y方向的加速度大小
float z = event.values[2]; //values[2]表示z方向的加速度大小
double xyz = Math.sqrt(x*x+y*y+z*z); //算出总的加速度大小
System.out.println("a = "+xyz);
}
@Override
public void onAccuracyChanged(Sensor sensor, int accuracy) { //传感器准确度变化时的回调函数,一般没什么用..
}
}, sensor, SensorManager.SENSOR_DELAY_NORMAL);
}
}
上面注册监听器时最后一个参数表示传感器的采样率,即多少时间间隔系统对该传感器进行一次采样。
对于values,该变量在不同的传感器中有这不同的含义,可以查看Android参考文档进行参考。