记android学习之路----android传感器的使用

移动端和桌面端最大的区别之一就是移动端硬件内置各种传感器,通过这些传感器可以开发很酷炫很实用的功能;以下是对常见的三种传感器的总结整理:

1:传感器的获取:

系统对于传感器的管理是统一的,都由SensorManger来管理;所以在使用某个传感器之前先要获取SensorManger实例,获取方法如下:

    //获取传感器管理器,系统的所有传感器都是通过这个来管理的;
    SensorManger smanger = (SensorManger)getSystemService(Context.SENSOR_SERVICE);

2:获取传感器对象:

传感器实例可以通过SensorManger实例的getDefaultSensor来获取:传入不同的传感器类型常量可以获取不同的传感器:

    //通过getDefaultSensor()来获取任意传感器对象:
    Sensor sensor = smanger.getDefaultSensor(Sensor.XXX);

3:传感器参数的监听:

传感器有测试精度,当精度发生变化的时候就会调用onAccuracyChanged()函数,使用传感器最多就是对传感器参数的监听,因此当传感器参数发生变化的时候就会调用onSensorChanged()函数:

    SensorEventListener sensorEvent = new SensorEventListener(){

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

        //当传感器的数字发生变化的时候就会调用这个方法
        //event是个数组
        public void onSensorChanged(SensorEvent event){
            //比如:获取当前传感器参数
            event.values[0]

        }
    }

4:注册:

传感器必须注册之后才能使用:

    //第一个参数是传感器参数的监听实例,第二个是传感器对象,第三个是数据更新频率;有四个值可选;
smanger.registerListener(SensorEventListener sensorEvent,Sensor sensor,SENSOR_DELAY_UI);

5:解除注册:

资源有限,不能浪费;在传感器使用完毕或者应用程序关掉之后一定要释放资源:

smanger.unregisterListener(SensorEventListener sensorEvent)

6:光传感器的使用:

        //下面获取光传感器,获取光传感器需要用Sensor.TYPE_LIGHT:
        Sensor sensor = smanger.getDefaultSensor(Sensor.TYPE_LIGHT);
        //在传感器参数变化监听中获取光照强度:
        public void onSensorChanged(SensorEvent event){
            //比如:获取当前传感器参数
            event.values[0];
        }

7:加速度传感器:

        //获取光传感器;使用:Sensor.ACCELEROMETER
        Sensor sensor = smanger.getDefaultSensor(Sensor.ACCELEROMETER);


        //获取当前传感器参数,加速度传感器参数有三个:代表xyz轴:
        event.values[0]  //X
        event.values[0]  //y        
        event.values[0]  //z    

8:方向传感器:

第一种方式:

获取方向传感器实例:

        //获取方向传感器
        Sensor sensor = smanger.getDefaultSensor(Sensor.ORIENTATION);

获取方向传感器参数:

        /获取当前传感器参数,方向传感器参数有三个:代表xyz轴:
        event.values[0]  //沿X的旋转角度
        event.values[0]  //沿y的旋转角度      
        event.values[0]  //沿z的旋转角度  

第二种方式:

第一种方式过于简单,参数也不是辣么准确,之后google提供了下面这种方式,获取精度较高,页是最为推荐的使用方式:
这种方式是通过加速度传感器和地磁传感器共同获取到的:
获取传感器管理对象:


    SensorManger smanger = (SensorManger)getSystemService(Context.SENSOR_SERVICE);

获取传感器实例:

    //通过getDefaultSensor()来加速度传感器对象:
    Sensor sensorspeend = smanger.getDefaultSensor(Sensor.ACCELEROMETER);

    //通过getDefaultSensor()来获取地磁传感器对象:
    Sensor sensorci = smanger.getDefaultSensor(Sensor.MANGETIC_FILED);

注册传感器:

    //加速度传感器注册:
smanger.registerListener(SensorEventListener sensorEvent,Sensor sensorspeend,SENSOR_DELAY_GAME);

    //地磁传感器注册:
smanger.registerListener(SensorEventListener sensorEvent,Sensor sensorci,SENSOR_DELAY_GAME);

获取传感器参数

SensorEventListener sensorEvent = new SensorEventListener(){

        //当传感器精度发生变化的时候就会调用该方法
        public void onAccuracyChanged(Sensor sensor,int accuracy){
            //暂时不做处理
        }
        /声明两个float数组,来存放地磁传感器和加速度传感器的参数;
        float[] acc = new float[3];
        float[] man = new float[3];

        //当传感器的数字发生变化的时候就会调用这个方法
        //event是个数组
        public void onSensorChanged(SensorEvent event){
            //获取当前传感器参数
            if(sensor == Sensor.ACCELEROMETER){
                //获取加速度传感器参数
                acc = event.values.clone()
            }else if(sensor == Sensor.MANGETIC_FILED){
                //获取地磁传感器的参数
                man = event.values.clone()
            }

            //用于存放R矩阵的数组
            float[] R = new float[9];
            //用于存放手机旋转最终结果的数组
            float[] values = new float[3];

            //获取R矩阵数据
            getRotationMatrix(R,null,acc,man); 
            //获取具体的旋转数值;0,1,2下标分别代表x,y,z
            smanger.getOritation(R,values); 
            //把数值转换为角度:
            xDergree = Math.toDegrees(values[0]);
            yDergree = Math.toDegrees(values[1]);
            zDergree = Math.toDegrees(values[2]);
        }
    }
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值