为了账号安全,请及时绑定邮箱和手机立即绑定

Android 传感器的使用方法

标签:
Android
传感器简介

手机中内置的传感器是一种微型的物理设备,它能够探探测、感受外界的信号,并按一定规律转换成数值信息。
常见的传感器如光照传感器、加速度传感器、地磁场传感器、压力传感器、温度传感器……


传感器调用

Android 中每个传感器用法类似,只要遵循下面的步骤。
第一步:获取 SensorManager 的实例

SensorManager sensorManager = (SensorManager) getSystemService(Context.SENSOR_SERVICE);

SensorManager 是系统所有传感器的管理器。

第二步:获取 Sensor 传感器类型

调用 SensorManager 实例的 getDefaultSensor( )方法得到任意传感器的类型。

Sensor sensor = sensorManager.getDefaultSensor(Sensor.TYPE_LIGHT);

Sensor参数下有多有多个常量,表示不同的传感器名称:

加速传感器(Sensor.TYPE_ACCELEROMETER)
磁场传感器(Sensor.TYPE_MAGNETIC_FLELD)
光线传感器 ( Sensor.TYPE_LIGHT )

第三步:对传感器信号进行监听

借助 SensorEventListener 对传感器输出的信号进行监听。

    SensorEventListener listener = new SensorEventListener() {
        @Override
        public void onSensorChanged(SensorEvent event) {
            //当传感器监测到的数值发生变化时就会调用 onSensorChanged 方法
            //SensorEvent 参数中又包含了一个 values 数组
            // 所有传感器输出的信息都存放在 values 数组中
        }

        @Override
        public void onAccuracyChanged(Sensor sensor, int accuracy) {
            //传感器的精度发生变化时就会调用 onAccuracyChanged 方法                }
    };

event.vaues 的长度为3,每个数组元素的含义不同。

Accelerometer(加速传感器)
values[0] : 沿x轴方向加速度
values[1] : 沿 y 轴方向的加速度
values[2] : 沿 z 轴方向的加速度,也就是重力加速度
+
Gyroscope( 陀螺传感器)
values:分别表示x,y,z轴的旋转的角速度
+
Light(光线传感器)
values数组只有第一个元素values[0]有意义,表示光线的强度,最大值是120000.0f.

第四步:注册 SensorEventListener

调用 SensorManager 的 registerListener( ) 方法来注册 SensorEventListener 使其生效。

sensorManager.registerListener(listener,sensor,sensorManager.SENSOR_DELAY_NORMAL);

SensorManager下有多个常量,表示传感器的更新速度。

SensorManager.SENSOR_DELAY_FASTEST: 以最快的速度获得传感器数据
SENSOR_DELAY_GAME: 适合与在游戏中获得传感器数据
SENSOR_DELAY_NORMAL: 以一般的速度获得传感器数据
SENSOR_DELAY_UI :适合于在ui空间中获得数据
这四种更新速率依次递减

另外始终要记得,当程序退出或传感器使用完毕时,一定要调用 unregisterListener( )方法将使用的资源释放掉: sensorManager.unregisterListener(listener);


传感器使用示例
public class TestActivity extends Activity {

    private SensorManager sensorManager;
    //第三步:对传感器信号进行监听
    private SensorEventListener listener = new SensorEventListener() {
        @Override
        public void onSensorChanged(SensorEvent event) {
            //提示当前光照强度
            Toast.makeText(TestActivity.this,
                    "当前光照强度:" + event.values[0] + "勒克斯", Toast.LENGTH_SHORT).show();
        }

        @Override
        public void onAccuracyChanged(Sensor sensor, int accuracy) {

        }
    };

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        //第一步:获取 SensorManager 的实例
        sensorManager = (SensorManager) getSystemService(Context.SENSOR_SERVICE);
        //第二步:获取 Sensor 传感器类型
        Sensor sensor = sensorManager.getDefaultSensor(Sensor.TYPE_LIGHT);
        //第四步:注册 SensorEventListener
        sensorManager.registerListener(listener,sensor,SensorManager.SENSOR_DELAY_NORMAL);
    }

    @Override
    protected void onDestroy() {
        super.onDestroy();
        //传感器使用完毕,释放资源
        if(sensorManager!=null){
            sensorManager.unregisterListener(listener);
        }
    }
}
点击查看更多内容
23人点赞

若觉得本文不错,就分享一下吧!

评论

作者其他优质文章

正在加载中
感谢您的支持,我会继续努力的~
扫码打赏,你说多少就多少
赞赏金额会直接到老师账户
支付方式
打开微信扫一扫,即可进行扫码打赏哦
今天注册有机会得

100积分直接送

付费专栏免费学

大额优惠券免费领

立即参与 放弃机会
意见反馈 帮助中心 APP下载
官方微信

举报

0/150
提交
取消