RotationVector传感器ArrayIndexOutOfBounds异常

时间:2013-05-14 11:56:06

标签: android android-sensors

我正在编写一个应用程序来获取有关传感器的所有信息。我在旋转矢量上遇到了问题。我在官方的Android网站上看到你有4个值可以获得这个传感器:

TYPE_ROTATION_VECTOR:

  

SensorEvent.values [0]沿x轴的旋转矢量分量(x *   SIN(θ/ 2))。

     

SensorEvent.values [1]沿y轴的旋转矢量分量(y *   SIN(θ/ 2))。

     

SensorEvent.values [2]沿z轴的旋转矢量分量(z *   SIN(θ/ 2))。

     

SensorEvent.values [3]旋转矢量的标量分量   ((cos(θ/ 2))。1

这是我的代码:

@Override
public void onSensorChanged(SensorEvent event) {
    // TODO Auto-generated method stub
    //Get sensors values
    float x, y, z, s;
    String s1 = "stringX", s2 = "stringY", s3 = "stringZ", s4 = "stringS";

    if (event.sensor.getType() == Sensor.TYPE_ROTATION_VECTOR) {


            x = event.values[0];
            y = event.values[1];
            z = event.values[2];
            s = event.values[3]; // <============== The error indicate this line

            s1 = "" + x;
            s2 = "" + y;           
            s3 = "" + z;
            s4 = "" + s;

            tvx.setText(s1);
            tvy.setText(s2);
            tvz.setText(s3);
            tvs.setText(s4);

    }
}

这是日志猫:

 FATAL EXCEPTION: main
 java.lang.ArrayIndexOutOfBoundsException: length=3; index=3
at com.example.sensortnewtest.RotationVectorInfos.onSensorChanged(RotationVectorInfos.java:128)
at android.hardware.SystemSensorManager$ListenerDelegate$1.handleMessage(SystemSensorManager.java:204)
at android.os.Handler.dispatchMessage(Handler.java:99)
at android.os.Looper.loop(Looper.java:137)
at android.app.ActivityThread.main(ActivityThread.java:5041)
at java.lang.reflect.Method.invokeNative(Native Method)
at java.lang.reflect.Method.invoke(Method.java:511)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:793)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:560)
at dalvik.system.NativeStart.main(Native Method)

这是否意味着event.values [3]不可能?

谢谢你们。

2 个答案:

答案 0 :(得分:1)

根据the Android documentation on SensorEvent,第四个值(即event.values [3])是可选的,并且仅在values.length = 4时出现。(在该网页上搜索TYPE_ROTATION_VECTOR)。所以你只是遇到没有提供它的情况。

答案 1 :(得分:0)

这是3D方式。仅在x,y和z轴上旋转这里的S是什么意思。请不要使用它。我希望你理解