近日接触到安卓传感器方面的编程,安卓提供好了Sensor、SensorManager和SenseorEventManager来获得传感器数据以及采取一些相应措施。
第一步:获得传感器数值
1、先通过服务获得SensorManager: (getSystemService)this.getSystemService(Context.SENSOR_SERVICE)。 注意this是主Activity的this,如果是在别处调用,需要将主Activity传过去。
2、(可选)通过SensorManager可以获得特定的Sensor以及手机所带有的所有Sensor的一个List。可以产看Sensor的相关信息例如厂商、型号等。
3、通过SensorManager注册监听事件。boolean registerListener(SensorEventListener listener, Sensor sensor, int rate)。可以自己写一个类实现SensorEventListener接口,可以让主Activity实现其接口,也可以new 一个SensorEventListener。第二个是针对哪一个传感器所注册的监听器。第三个是采样延迟(微妙)。
4、实现SensorEventListener中的两个方法。public void onSensorChanged(SensorEvent event);public void onAccuracyChanged(Sensor sensor, int accuracy);
其中可以通过第一个方法的event获得传感器的当前数值。
第二步:将数值显示到界面上
我采用的是自己写了一个类(MySensorEventListener)实现监听器的接口。
在非UI线程要控制UI,于是采用Handler。在初始化MySensorEventListener时需要将主Activity的Context以及界面View(或者直接传显示的控件)传过去。在MySensorEventListener的类中,需要在初始化Handler时使用new Handler(Context.getMainLooper())。然后在获得数据后利用Handler发送消息即可。
第三步:实现服务端控制开始以及结束数据采集。同时需要将采集的数据上传服务端。
利用socket实现通信。(见java——Socket通信)
注意:当需要同时监听多个sensor时,只需要一个SensorManager。然后初始化多个MySensorEventListener,注册时使用不同的MySensorEventListener和指定不同的Sensor。同时在MySensorEventListener中的public void onSensorChanged(SensorEvent event)中利用event.sensor.getType()来判断当前是哪个一个Sensor的数据,来做出不同的操作。