gpt4 book ai didi

android - SensorManager.getRotationMatrix 在 Android Emulator 上总是返回 false

转载 作者:搜寻专家 更新时间:2023-11-01 09:00:41 24 4
gpt4 key购买 nike

我尝试通过 SensorManager.getOrientation 在我的 Android 模拟器上获取方向。在此之前,我使用 SensorManager.getRotationMatrix 获取旋转矩阵,但这总是返回 false。这是我的 Activity 代码:


public class MainActivity extends Activity implements SurfaceHolder.Callback, View.OnClickListener{<p></p>

public final static String DEBUG_TAG = "MainActivity";

private SensorManager sensorManager;
private SurfaceView preview;
private float[] mGravs;
private float[] mGeoMags;
private float[] mRotationM;
private float[] mOrientation;

private Sensor mAccelerometer;
private Sensor mMagneticField;

@Override
protected void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
getWindow().addFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN);
requestWindowFeature(Window.FEATURE_NO_TITLE);

setContentView(R.layout.activity_main);

preview = (SurfaceView)findViewById(R.id.SurfaceView1);

sensorManager = (SensorManager)getSystemService(SENSOR_SERVICE);

mAccelerometer = sensorManager.getDefaultSensor(Sensor.TYPE_ACCELEROMETER);
mMagneticField = sensorManager.getDefaultSensor(Sensor.TYPE_MAGNETIC_FIELD);

mGravs = new float[3];
mGeoMags = new float[3];
mRotationM = new float[16];
mOrientation = new float[3];

List<Sensor> sensorList = sensorManager.getSensorList(Sensor.TYPE_ALL);
for (int nI = 0; nI < sensorList.size(); nI++) {
Log.d(DEBUG_TAG, sensorList.get(nI).getName());
}
}

private SensorEventListener sensorEventListener = new SensorEventListener() {
@Override
public void onSensorChanged(SensorEvent event)
{
synchronized (this) {
switch (event.sensor.getType()) {
case Sensor.TYPE_ACCELEROMETER:
System.arraycopy(event.values, 0, mGravs, 0, 3);
break;
case Sensor.TYPE_MAGNETIC_FIELD:
System.arraycopy(event.values, 0, mGeoMags, 0, 3);
break;
default:
return;
}
if (mGravs != null && mGeoMags != null) {
boolean bSuccess = SensorManager.getRotationMatrix(mRotationM, null, mGravs, mGeoMags);
if (bSuccess) {
SensorManager.getOrientation(mRotationM, mOrientation);
}
}
}
}

@Override
public void onAccuracyChanged(Sensor sensor, int accuracy) {
// TODO Auto-generated method stub

}
};

private boolean openHardware()
{
sensorManager.registerListener(sensorEventListener, mAccelerometer, SensorManager.SENSOR_DELAY_NORMAL);
sensorManager.registerListener(sensorEventListener, mMagneticField, SensorManager.SENSOR_DELAY_NORMAL);
return true;
}

private void closeHardware()
{
sensorManager.unregisterListener(sensorEventListener);
}

@Override
protected void onResume()
{
super.onResume();
openHardware();
}

@Override
protected void onPause()
{
super.onPause();
closeHardware();
}

@Override
protected void onStop()
{
closeHardware();
super.onStop();
}
}

好的,出现这个问题是因为磁场传感器总是返回 [0.0, 0.0, 0.0]。我怎样才能让磁场传感器返回其他东西?

最佳答案

我遇到了同样的问题。一切都变得错误

这个答案对我有帮助:https://stackoverflow.com/a/14224122/1549127

关于android - SensorManager.getRotationMatrix 在 Android Emulator 上总是返回 false,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15208597/

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