android——Seneor(获得数据值流程以及同时监听多个sensor)

近日接触到安卓传感器方面的编程,安卓提供好了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的数据,来做出不同的操作。

                 

你可能感兴趣的:(android,sensor)