gpt4 book ai didi

java - android OnSensorChanged() 响应慢

转载 作者:太空狗 更新时间:2023-10-29 14:26:16 25 4
gpt4 key购买 nike

我有这样实现的代码:

    //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 tablet 上有问题(方位角、俯仰和滚动的更新响应不佳,有时需要 5 到 8 秒)。

我检查过 OnSensorChanged() 的调用运行良好,但“if(成功)”测试并不总是成功,这导致了这个问题。

我通过输出 boolean 变量“成功”来测试它:

  • 在 Galaxy Nexus 中,错误率和正确率大约为 1:1。
  • 在 Nexus 平板电脑中,错误率和正确率相差很大,可以高达 >20 : 1。

非常感谢任何帮助。

最佳答案

问题出在下面的代码上:

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”。但我不确定为什么?

关于java - android OnSensorChanged() 响应慢,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12255647/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com