Android传感器

来源:互联网 发布:安装ubuntu到u盘 编辑:程序博客网 时间:2024/04/27 21:12

安卓手机有好多传感器(加速度传感器,光照传感器,温度传感器,磁场传感器,姿态传感器,距离传感器,陀螺仪传感器),不过获取它们和数据的方法大致相同,只是在参数的形式上有些差异。

注意:当使用完传感器后要及时将它关闭,以免耗费电量。

1、首先介绍一下一个比较重要的类SensorManager。我们通过SensorManager 来获取手机中的传感器。

SensorManager 对象需要调用getSystemService(SENSOR_SERVICE)来获得。关于getSystemService()可以获得的系统服务及服务对应的参数常量可以参见API文档。使用getDefaultSensor()获得相应的传感器。

以下以获得加速度传感器为例:

 public class SensorActivity extends Activity, implements SensorEventListener {     private final SensorManager mSensorManager;     private final Sensor mAccelerometer;     public SensorActivity() {         mSensorManager = (SensorManager)getSystemService(SENSOR_SERVICE);         mAccelerometer = mSensorManager.getDefaultSensor(Sensor.TYPE_ACCELEROMETER);     }     protected void onResume() {         super.onResume();         mSensorManager.registerListener(this, mAccelerometer, SensorManager.SENSOR_DELAY_NORMAL);     }     protected void onPause() {         super.onPause();         mSensorManager.unregisterListener(this);     }     public void onAccuracyChanged(Sensor sensor, int accuracy) {     }     public void onSensorChanged(SensorEvent event) {     } }
正如代码中所见,在getDefaultSensor()获得传感器后,还需要在onResume()中注册传感器监听器(使用registerListener()),在onPause()中注销传感器监听器(使用unregisterListener())。(这和注册与注销BroadcastReceiver一样)

除此之外,SensorActivity类还实现了SensorEventListener接口,并且实现了该接口的两个方法onAccuracyChanged(),onSensorChanged()这两个回调函数功能从名字上看就很明确了,就不做解释了。  通过event.values获得参数。


再上一段代码,与上面的做比较:

public class SensorActivity extends Activity {private final SensorManager mSensorManager;private final Sensor mAccelerometer;public SensorActivity() {mSensorManager = (SensorManager) getSystemService(SENSOR_SERVICE);mAccelerometer = mSensorManager.getDefaultSensor(Sensor.TYPE_ACCELEROMETER);}protected void onResume() {super.onResume();mSensorManager.registerListener(mySensorListener, mAccelerometer,SensorManager.SENSOR_DELAY_NORMAL);}protected void onPause() {super.onPause();mSensorManager.unregisterListener(mySensorListener);}private SensorEventListener mySensorListener = new SensorEventListener() {public void onAccuracyChanged(Sensor sensor, int accuracy) {}public void onSensorChanged(SensorEvent event) {}};}

这个类并没有实现SensorEventListener接口,而是包含一个SensorEventListener对象。然后再解释以下传感器注册时的三个参数:1、监听器对象2、传感器对象3、采样率。

实现监听器有好多种写法,但在这里我觉得还是第二种比较清晰,职责比较明确。大家可以参考这篇文章。OnClickListener()用法

原创粉丝点击