传感器的应用开发
先贴几个地址
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参考文档进行参考。