Android sensor.getType() 检查有时不正确
Android sensor.getType() check sometimes incorrect
我需要获取方向值,我遵循通用方法:
@Override
public final void onSensorChanged(SensorEvent event) {
switch (event.sensor.getType()){
case Sensor.TYPE_ACCELEROMETER:
mGravity = event.values;
break;
case Sensor.TYPE_MAGNETIC_FIELD:
mGeomagnetic = event.values;
break;
}
if (mGravity == mGeomagnetic){
Log.w("Sensor", "Strange things happen!");
}
}
public float[] getOrientation(){
float orientation[] = new float[3];
if (mGravity != null && mGeomagnetic != null) {
float R[] = new float[9];
float I[] = new float[9];
if (SensorManager.getRotationMatrix(R, I, mGravity, mGeomagnetic)) {
SensorManager.getOrientation(R, orientation);
return orientation;
} else {
Log.w("Sensor", "getRotationMatrix() failed");
}
}
return new float[]{0,0,0};
}
如您所见,我检查了两个分别存储的值是否相等。我被迫这样做是因为 确实发生了奇怪的事情!
怎么会这样以及如何避免这种情况? event.sensor.getType() 的检查有时不正确。逻辑不成立,我错过了什么???
这里有更多情报。 switch 语句运行良好,但无论如何变量都是混合的。
难道event.values里面有旧数据??
UPD:如果我理解正确,变量 link 到内存中的相同位置......这里有什么问题?
尝试复制 SensorEvent values
字段而不是保留引用。
尝试:
if(sensor.getType()==Sensors.TYPE_ACCELEROMETER)
{
.....
}<p>
if() //other sensor check
而不是 switch 语句
避免在传感器中使用开关盒。对我有用!
我需要获取方向值,我遵循通用方法:
@Override
public final void onSensorChanged(SensorEvent event) {
switch (event.sensor.getType()){
case Sensor.TYPE_ACCELEROMETER:
mGravity = event.values;
break;
case Sensor.TYPE_MAGNETIC_FIELD:
mGeomagnetic = event.values;
break;
}
if (mGravity == mGeomagnetic){
Log.w("Sensor", "Strange things happen!");
}
}
public float[] getOrientation(){
float orientation[] = new float[3];
if (mGravity != null && mGeomagnetic != null) {
float R[] = new float[9];
float I[] = new float[9];
if (SensorManager.getRotationMatrix(R, I, mGravity, mGeomagnetic)) {
SensorManager.getOrientation(R, orientation);
return orientation;
} else {
Log.w("Sensor", "getRotationMatrix() failed");
}
}
return new float[]{0,0,0};
}
如您所见,我检查了两个分别存储的值是否相等。我被迫这样做是因为 确实发生了奇怪的事情!
怎么会这样以及如何避免这种情况? event.sensor.getType() 的检查有时不正确。逻辑不成立,我错过了什么???
这里有更多情报。 switch 语句运行良好,但无论如何变量都是混合的。
难道event.values里面有旧数据??
UPD:如果我理解正确,变量 link 到内存中的相同位置......这里有什么问题?
尝试复制 SensorEvent values
字段而不是保留引用。
尝试:
if(sensor.getType()==Sensors.TYPE_ACCELEROMETER)
{
.....
}<p>
if() //other sensor check
而不是 switch 语句
避免在传感器中使用开关盒。对我有用!