Android传感器及使用方法

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
UISensorManager.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) {}

}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值