Android传感器学习五---实例

来源:互联网 发布:巴黎综合理工学院知乎 编辑:程序博客网 时间:2024/05/20 02:28

传感器的框架

在package android.hardware。

执行过程

主要通过以下步骤:

1、获得传感器管理对象

2、通过传感器管理对象的getDefaultSensor()获得传感器对象

3、注册传感器对象

4、传感器事件监听


动作过程如下图:


实例一:实现加速度数据的收集显示

package com.example.gravity;

import android.hardware.Sensor;
import android.hardware.SensorEvent;
import android.hardware.SensorEventListener;
import android.hardware.SensorManager;
import android.os.Bundle;
import android.app.Activity;
import android.widget.TextView;

public class MainActivity extends Activity implements SensorEventListener {

    private SensorManager sensorManager;// 定义传感器管理对象
    private Sensor sensor;// 定义传感器对象
    private TextView tv1;
    private TextView tv2;
    private TextView tv3;
    private float gravity[] = new float[3];

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        tv1 = (TextView) findViewById(R.id.textView1);
        tv2 = (TextView) findViewById(R.id.textView2);
        tv3 = (TextView) findViewById(R.id.textView3);
        // 1、得到sensorManager对象
        /*
         * 得到sensorManager传感器管理对象。getSystemService是Android很重要的一个API,它是Activity的一个方法
         * ,根据传入的Name来取得对应的object,然后转换成相应的服务对象。
         */
        sensorManager = (SensorManager) this.getSystemService(SENSOR_SERVICE);
        // 2、得到sensor(此方式已经过时了,但是为了支持低版本的还是需要选择这个)
        // sensor = sensorManager
        // .getDefaultSensor(SensorManager.SENSOR_ACCELEROMETER);
        // 将SensorManager.SENSOR_ACCELEROMETER替换为Sensor.TYPE_ACCELEROMETER,后者为新版本的
        /* 通过传感器管理对象的getDefaultSensor()获得传感器对象得到sensor */
        sensor = sensorManager.getDefaultSensor(Sensor.TYPE_ACCELEROMETER);
        // 3、得到感应事件监听,通过注册实现
    }

    @Override
    protected void onPause() {
        // TODO Auto-generated method stub
        super.onPause();
        /* 注销传感器对象 */
        sensorManager.unregisterListener(this);
    }

    @Override
    protected void onResume() {
        // TODO Auto-generated method stub
        super.onResume();
        /* 第一个参数为Listener实例,第二个参数为想接收的传感器,第三个参数为接收频度 */
        sensorManager.registerListener(this, sensor,
                SensorManager.SENSOR_DELAY_NORMAL);
    }

    /*
     * onAccuracyChanged(Sensor sensor,int
     * accuracy):传感器的精准度发生变化时调用。accuracy表示新精度值。
     */
    @Override
    public void onAccuracyChanged(Sensor arg0, int arg1) {
        // TODO Auto-generated method stub

    }

    /*
     * * SensorEventListener 是使用传感器的核心部分.onSensorChanged(SensorEvent
     * event):在传感器值更改时调用。SensorEvent对象包括传感器获得的方向、加速度等信息。如下传感器一旦发现加速度值变化,便收集数据。
     */
    @Override
    public void onSensorChanged(SensorEvent event) {
        // 但是这里获取的加速度会受到重力的影响,使用高通滤波的方式进行过滤,下面没有使用,但是在前面那篇翻译Motion Sensor提到过

        gravity[0] = event.values[0];
        gravity[1] = event.values[1];
        gravity[2] = event.values[2];
        tv1.setText("x = " + gravity[0]);
        tv2.setText("y = " + gravity[1]);
        tv3.setText("z = " + gravity[2]);

    }
}

======================================================================================================


原创粉丝点击