我是靠谱客的博主 害羞雨,最近开发中收集的这篇文章主要介绍梅特勒杯创新大赛(二):Android姿态传感器-三轴角度1.初始化2.回调方法,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

这一部分我们讨论Android的姿态传感器中对于三轴角度的数据读取与应用。

1.初始化

 

 //初始化姿态传感器
    private void init_sensor(){
        sensorManager = (SensorManager) getSystemService(SENSOR_SERVICE);

        //加速度传感器和地磁传感器
        acc_sensor = sensorManager.getDefaultSensor(Sensor.TYPE_ACCELEROMETER);
        mag_sensor = sensorManager.getDefaultSensor(Sensor.TYPE_MAGNETIC_FIELD);

        //给传感器注册监听:
        sensorManager.registerListener(this, acc_sensor, SensorManager.SENSOR_DELAY_GAME);
        sensorManager.registerListener(this, mag_sensor,SensorManager.SENSOR_DELAY_GAME);

    }

这里注意,三轴角度是不能直接读出来的,需要结合加速度传感器和地磁传感器计算得到,所以这里进行两个传感器的初始化工作。

 

2.回调方法

 

 //传感器状态改变时的回调方法
    @Override
    public void onSensorChanged(SensorEvent event) {
        if(event.sensor.getType()==Sensor.TYPE_ACCELEROMETER){
            accValues=event.values.clone();//这里是对象,需要克隆一份,否则共用一份数据
        }
        else if(event.sensor.getType()==Sensor.TYPE_MAGNETIC_FIELD){
            magValues=event.values.clone();//这里是对象,需要克隆一份,否则共用一份数据
        }
        /**public static boolean getRotationMatrix (float[] R, float[] I, float[] gravity, float[] geomagnetic)
         * 填充旋转数组r
         * r:要填充的旋转数组
         * I:将磁场数据转换进实际的重力坐标中 一般默认情况下可以设置为null
         * gravity:加速度传感器数据
         * geomagnetic:地磁传感器数据
         */
        SensorManager.getRotationMatrix(r, null, accValues, magValues);
        /**
         * public static float[] getOrientation (float[] R, float[] values)
         * R:旋转数组
         * values :模拟方向传感器的数据
         */

        SensorManager.getOrientation(r, values);

        //将弧度转化为角度后输出
        /*
        values[0]  :方向角,但用(磁场+加速度)得到的数据范围是(-180~180),也就是说,0表示正北,90表示正东,180/-180表示正南,-90表示正西。而直接通过方向感应器数据范围是(0~359)360/0表示正北,90表示正东,180表示正南,270表示正西。
        values[1]  pitch 倾斜角  即由静止状态开始,前后翻转,手机顶部往上抬起(0~-180),手机尾部往上抬起(0~180)
        values[2]  roll 旋转角 即由静止状态开始,左右翻转,手机左侧抬起(0~180),手机右侧抬起(0~-180)
        */
        for(int i=0;i<3;i++){
            values[i]=(float) Math.toDegrees(values[i]);
        }
    }


这里需要借助旋转数组(矩阵)进行计算,通过get方法结合传感器数据得到。然后得到方向传感器的数据(三轴角度),最后转化为角度,当然这个角度的定义是有规定的,具体如上面的注释所说。

 

 

之后就可以使用value的值了,可以发现转动手机时候,三轴角度都是实时变化的~
 

最后

以上就是害羞雨为你收集整理的梅特勒杯创新大赛(二):Android姿态传感器-三轴角度1.初始化2.回调方法的全部内容,希望文章能够帮你解决梅特勒杯创新大赛(二):Android姿态传感器-三轴角度1.初始化2.回调方法所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(59)

评论列表共有 0 条评论

立即
投稿
返回
顶部