安卓开发中拥有多种传感器,google提供了11种传感器供应用层使用:加速度、磁力、方向、陀螺仪、光线、压力(返回当前压强)、温度、接近(检测物体与手机的距离)、重力、线性加速度和旋转矢量。
在使用传感器之前,需要将工程中的类接口到SensorEventListener,接口后会有两个重载方法来进行监听,并取得感应检测Sensor状态。其中onAccuracyChanged()方法在感应检测到Sensor的精密度有变化时被调用,onSensorChanged()方法是在感应检测到Sensor的值有变化时被调用到。 工程建立后,声明SensorManager和Sensor两个对象,通过三条语句完成对传感器管理器,传感器以及传感器的注册的操作: manager =(SensorManager)getSystemService(SENSOR_SERVICE);//获得传感器的服务。 sensor = manager.getDefaultSensor(Sensor.TYPE_ACCELEROMETER);//获得加速度传感器服务 manager.registerListener(this, sensor, SensorManager.SENSOR_DELAY_UI);//对传感器服务进行注册。在传感器服务的注册方法中,有三个参数,三个参数分别为:监听sensor事件,Sensor目标种类,延迟时间的精度密度(包含FASTEST,GAME,UI,NORMAL四种情况,FASTEST太灵敏用不到,GAME主要用于游戏的开发,一般研发中使用UI和NORMAL)。完成了传感器服务的注册后,便可以进行感应数据的读取。public void onSensorChanged(SensorEvent event) { mgx = event.values[SensorManager.DATA_X]; mgy = event.values[sensorManager.DATA_Y]; if(mgx<2&&mgx>-2&&mgxold<-2) {WifiSend("1");} else if(mgx<2&&mgx>-2&&mgxold>2) {WifiSend("2");} else if(mgy<2&&mgy>-2&&mgyold<-2) {WifiSend("3");} else if(mgy<2&&mgy>-2&&mgyold>2) {WifiSend("4");} mgxold = mgx; mgyold = mgy; }此段代码的作用是通过对比前后两次加速度传感器的数据,来判别手机转动的方式,然后对移动小车进行行进控制,达到重力感应控制小车的目的。在使用完传感器之后,需要在工程对传感器服务进行注销,避免当Activity在后天运行时消耗手机电量。
SensorManager.unregisterListener(SensorEventListener, mSensor);