Android传感器的简单使用-1

来源:互联网 发布:fastjson源码下载 编辑:程序博客网 时间:2024/06/13 12:33

监视传感器事件

要监视原始的传感器数据,你需要实现两个通过SensorEventListener接口暴露的回调方法:onAccuracyChanged()onSensorChanged()。Android系统在任何发生下列事情的时候都会调用这两个方法:

  • 传感器精度的改变:

这种情况中,系统会调用onAccuracyChanged()方法,它提供了你要引用的发生精度变化的Sensor对象。精度使用以下四个状态常量之一来代表的:

SENSOR_STATUS_ACCURACY_LOWSENSOR_STATUS_ACCURACY_MEDIUMSENSOR_STATUS_ACCURACY_HIGHSENSOR_STATUS_UNRELIABLE
  • 传感器报告新的值:

这种情况中,系统会调用onSensorChanged()方法,它提供了一个SensorEvent对象。SensorEvent对象包含了有关新的传感器数据的信息,包括:数据的精度、产生数据的传感器、产生数据时的时间戳、以及传感器记录的新的数据。

package com.senmar;import android.app.Activity;import android.hardware.Sensor;import android.hardware.SensorEvent;import android.hardware.SensorEventListener;import android.hardware.SensorManager;import android.os.Bundle;import android.widget.TextView;public class MainActivity extends Activity implements SensorEventListener {    private TextView tvSensors,tvSensors1,tvSensors2;    private SensorManager sensorManager;    private float[] gravity = new float[3];//保存重力传感器数据    @Override    protected void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        setContentView(R.layout.activity_main);        //显示数据控件        tvSensors = (TextView) findViewById(R.id.tvSensors);        tvSensors1 = (TextView) findViewById(R.id.tvSensors1);        tvSensors2 = (TextView) findViewById(R.id.tvSensors2);        // 获取传感器服务        sensorManager = (SensorManager) getSystemService(SENSOR_SERVICE);    }    @Override    public void onAccuracyChanged(Sensor sensor, int i) {        // 当传感器的精度发生改变时调用此方法    }    @Override    public void onSensorChanged(SensorEvent event) {        switch (event.sensor.getType()) {        case Sensor.TYPE_ACCELEROMETER:// 加速度传感器            // 消杂:消除重力对回传值的影响            final float alpha = (float) 0.8;            gravity[0] = alpha * gravity[0] + (1 - alpha) * event.values[0];            gravity[1] = alpha * gravity[1] + (1 - alpha) * event.values[1];            gravity[2] = alpha * gravity[2] + (1 - alpha) * event.values[2];            String accelerometer = "加速度\n" + "X:"                    + (event.values[0] - gravity[0]) + "\nY:"                    + (event.values[1] - gravity[1]) + "\nZ:"                    + (event.values[2] - gravity[2]);            tvSensors.setText(accelerometer);            break;        case Sensor.TYPE_GRAVITY:// 重力传感器            // 获取返回值            gravity[0] = event.values[0];            gravity[1] = event.values[1];            gravity[2] = event.values[2];            break;        case Sensor.TYPE_PROXIMITY:// 临近传感器            // 显示在标题            tvSensors1.setText("临近\n"+String.valueOf((event.values[0])));            break;        case Sensor.TYPE_LIGHT:// 临近传感器            // 显示在标题            tvSensors2.setText("光照\n"+String.valueOf(event.values[0]));            break;        default:            break;        }    }//生命周期函数    @Override    protected void onResume() {        super.onResume();        // 注册监听传感器        // 加速度        sensorManager.registerListener(this,                sensorManager.getDefaultSensor(Sensor.TYPE_ACCELEROMETER),                SensorManager.SENSOR_DELAY_UI);        // 重力        sensorManager.registerListener(this,                sensorManager.getDefaultSensor(Sensor.TYPE_GRAVITY),                SensorManager.SENSOR_DELAY_FASTEST);        // 临近传感器        sensorManager.registerListener(this,                sensorManager.getDefaultSensor(Sensor.TYPE_PROXIMITY),                SensorManager.SENSOR_DELAY_UI);        // 光照传感器        sensorManager.registerListener(this,                sensorManager.getDefaultSensor(Sensor.TYPE_LIGHT),                SensorManager.SENSOR_DELAY_UI);    }//生命周期函数    @Override    protected void onPause() {        super.onPause();        // 取消传感器监听        sensorManager.unregisterListener(this);    }}

这里写图片描述

0 0