Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/redis/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java android OnSensorChanged()响应缓慢_Java_Android_Android Sensors - Fatal编程技术网

Java android OnSensorChanged()响应缓慢

Java android OnSensorChanged()响应缓慢,java,android,android-sensors,Java,Android,Android Sensors,我的代码实现如下: //register sensor in OnResume mSensorManager.registerListener(this, accelerometer, SensorManager.SENSOR_DELAY_UI); mSensorManager.registerListener(this, magnetometer, SensorManager.SENSOR_DELAY_UI); public void onSensorChan

我的代码实现如下:

    //register sensor in OnResume
    mSensorManager.registerListener(this, accelerometer, SensorManager.SENSOR_DELAY_UI);
    mSensorManager.registerListener(this, magnetometer, SensorManager.SENSOR_DELAY_UI);

    public void onSensorChanged(SensorEvent event) {

    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];
        boolean success = SensorManager.getRotationMatrix(R, I, mGravity, mGeomagnetic);

        if (success) {
            float orientation[] = new float[3];
            SensorManager.getOrientation(R, orientation);

            azimuth = (int)( Math.toDegrees( orientation[0] ) + 0.5 );    // orientation contains: azimuth, pitch and roll
            pitch = (int)( Math.toDegrees( orientation[1] ) + 0.5 );
            roll = (int)( Math.toDegrees( orientation[2] ) + 0.5 );

            // output azimuth, pitch and roll
        }
    }
}
上述代码在Galaxy Nexus cell中运行良好,但在Nexus平板电脑中存在问题(方位角、俯仰和滚动的更新没有很好的响应,有时需要5到8秒)

我已经检查了OnSensorChanged()的调用是否正常工作,但是“if(success)”测试并不总是成功,这就导致了这个问题

我通过输出布尔变量“success”对其进行了测试:

  • 在Galaxy Nexus中,假与真的比率约为1:1
  • 在Nexus平板电脑中,错误率和真实率差异很大,可以高达>20:1

非常感谢您的帮助。

这可能是因为存在固定的SensorEvents池,如果您直接使用其中的数据,它可以从您的下方更改,但通过克隆它,您可以随时使用该数据。

问题在于以下代码:

if (event.sensor.getType() == Sensor.TYPE_ACCELEROMETER) mGravity = event.values; if (event.sensor.getType() == Sensor.TYPE_MAGNETIC_FIELD) mGeomagnetic = event.values; 
应该是:

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

否则,“getRotationMatrix”方法将经常返回“false”。但我不知道为什么?

问题在于以下代码:if(event.sensor.getType()==sensor.TYPE\u加速度计)mGravity=event.values;if(event.sensor.getType()==传感器.TYPE\u磁场)mGeomagnetic=event.values;它应该是:if(event.sensor.getType()==sensor.TYPE_)mGravity=event.values.clone();if(event.sensor.getType()=传感器.TYPE_MAGNETIC_FIELD)mGeomagnetic=event.values.clone();否则,“getRotationMatrix”方法将经常返回“false”。但我不知道为什么?非常感谢。在过去的几个小时里,我一直在挠头试图找出原因!!!这完美地解决了这个问题。