Android传感器及使用方法

来源:互联网 发布:度娘软件下载 编辑:程序博客网 时间:2024/05/29 21:34

Android 中传感器以三个浮点数为一组数据来描述设备所处的状态或周围的环境
当传感器测得状态发生变化时,调用SensorEventListener接口的OnSensorChanged(SensorEvent event)方法执行相关操作
这个方法的参数中的event传递了传感器的状态
在方法中可以用event.values[0]、event.values[1]和event.values[2]访问传感器测到的数据


在Android应用中使用传感器

1) 从系统服务中获取SensorManager

SensorManager sensorManager = (SensorManager) getSystemService(SENSOR_SERVICE);

2) 从SensorManager获取相应的传感器(Sensor)

Sensor sensor = sensorManager.getDefaultSensor(传感器类型常量);

常用的传感器有:加速传感器、重力传感器、陀螺仪、方向传感器、光线传感器等
在Sensor类中对各种类型传感器有对应的常量

传感器类型 常量 加速传感器 Sensor.TYPE_ACCELEROMETER 重力传感器 Sensor.TYPE_GRAVITY 陀螺仪 Sensor.TYPE_GYROSCOPE 方向传感器 Sensor.TYPE_ORIENTATION 光线传感器 Sensor.TYPE_LIGHT

3) 注册传感器事件监听器(SensorEventListener)

sensorManager.registerListener(SensorEventListener listener, Sensor sensor, int samplingPeriodUs);

SensorEventListener是一个接口,实现SensorEventListener接口,需要覆盖两个方法:
void onSensorChanged(SensorEvent event)
void onAccuracyChanged(Sensor sensor, int accuracy)

Sensor是2中获取到的传感器

第三个参数是采样周期,同样SensorManager类对不同的级别有对应的常量,周期由小到大(即采样由快到慢)分别为:

级别 常量 最快 SensorManager.SENSOR_DEALY_FASTEST 游戏 SensorManager.SENSOR_DELAY_GAME 普通 SensorManager.SENEOR_DELAY_NORMAL UI SensorManager.SENSOR_DELAY_UI

4) 注销传感器事件监听器

sensorManager.unregisterListener(SensorEventListener listener);

代码示例:
将传感器数据在Activity中显示

1) 布局文件 activity_test.xml

<?xml version="1.0" encoding="utf-8"?><LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"    android:layout_width="match_parent"    android:layout_height="match_parent"    android:orientation="vertical">    <Button        android:id="@+id/btn1"        android:layout_width="match_parent"        android:layout_height="wrap_content"        android:text="register" />    <Button        android:id="@+id/btn2"        android:layout_width="match_parent"        android:layout_height="wrap_content"        android:text="unregister" />    <TextView        android:id="@+id/tv1"        android:layout_width="match_parent"        android:layout_height="wrap_content" /></LinearLayout>

2) Test.java

public class Test extends Activity implements View.OnClickListener, SensorEventListener {    private TextView tv1;    private SensorManager sensorManager;    @Override    protected void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        setContentView(R.layout.activity_test);        //获取传感器服务        sensorManager = (SensorManager) getSystemService(SENSOR_SERVICE);        tv1 = (TextView) findViewById(R.id.tv1);        findViewById(R.id.btn1).setOnClickListener(this);        findViewById(R.id.btn2).setOnClickListener(this);    }    @Override    protected void onPause() {        super.onPause();        //离开Activity时注销监听器以节省资源        sensorManager.unregisterListener(this);    }    @Override    public void onClick(View v) {        int id = v.getId();            //获取传感器            Sensor sensor = sensorManager.getDefaultSensor(Sensor.TYPE_ACCELEROMETER);            //注册监听器            sensorManager.registerListener(this, sensor, SensorManager.SENSOR_DELAY_NORMAL);        } else if (id == R.id.btn2) {            //注销监听器            sensorManager.unregisterListener(this);        }    }    @Override    public void onSensorChanged(SensorEvent event) {        //获取传感器数据        float value0 = event.values[0];        float value1 = event.values[1];        float value2 = event.values[2];        //将数据显示到TextView中        tv1.setText(String.format("x:%f y:%f z:%f", value0, value1, value2));    }    @Override    public void onAccuracyChanged(Sensor sensor, int accuracy) {}}
0 0
原创粉丝点击