如何通过这种方式提取加速器和磁场类型?

时间:2015-01-23 11:44:07

标签: android android-sensors angle

我通过测量一个人握住手机的倾斜角度来为我的大学项目制作应用程序。我发现这个代码用于查找手机的倾斜角度。

event.sensor.getType()如何同时加速度计为1,磁场为2?它是一个整数值。此代码始终返回而不执行,因为event.sensor.getType()值始终为1.代码存在于 if(mGravity!= null&& mGeomagnetic!= null){

我使用的是带有Android 5.0.1的Nexus 4手机

如果我做错了,请告诉我。我已经按照规定的方式注册了传感器。

    float[] mGravity = null;
    float[] mGeomagnetic = null;
    float playerAngle1 = 0;
    float playerAngle2 = 0;

    **if (event.sensor.getType() == Sensor.TYPE_ACCELEROMETER)
        mGravity = event.values;
    if (event.sensor.getType() == Sensor.TYPE_MAGNETIC_FIELD)
        mGeomagnetic = event.values;**

    if (mGravity != null && mGeomagnetic != null) {

        float R[] = new float[9];
        float I[] = new float[9];

        for (int i = 0; i < 3; i++) {
            System.out.println(mGravity[i]);
        }

        for (int i = 0; i < 3; i++) {
            System.out.println(mGeomagnetic[i]);
        }

        System.out.println();
        System.out.println();

        boolean success = SensorManager.getRotationMatrix(R, I, mGravity,  mGeomagnetic);

        if (success) {

            System.out.println("getRotationMatrix");

            float orientation[] = new float[3];
            SensorManager.getOrientation(R, orientation);
            playerAngle1 = (float) Math.toDegrees(Math.atan2(orientation[1], orientation[0]));
            playerAngle2 = (float) Math.toDegrees(orientation[1]);
            System.out.println("Angle1 :" + playerAngle1);
            System.out.println("Angle2 :" + playerAngle2);

        }
    }

1 个答案:

答案 0 :(得分:0)

我必须将加速度计和磁场值存储为类变量而不是局部变量才能使其正常工作。这是一个非常简单的变化。