我已經成功實施aleph_null解決方案,在這裏我將添加未在接受的解決方案中提到的一些細節:
對於上述解決方案正常工作,您需要實現android.hardware.SensorEventListener接口。
您也需要註冊到SensorEventListener在你的onResume和方法的onPause如下:
@Override
protected void onResume() {
super.onResume();
mSensorManager.registerListener(this,
mRotVectSensor,
SensorManager.SENSOR_STATUS_ACCURACY_LOW);
}
@Override
protected void onPause() {
// unregister listener
super.onPause();
mSensorManager.unregisterListener(this);
}
注爲「@Bytecode」:爲了避免閃爍,用低值的採樣週期,類似的SensorManager .SENSOR_STATUS_ACCURACY_LOW。
我也注意到傳感器發送的數據比設備能處理的還要多,因此地圖攝像機開始以奇怪的方式移動!
來控制onSensorChanged處理的數據量,我建議以下實現:
@Override
public void onSensorChanged(SensorEvent event) {
if(event.sensor.getType() == Sensor.TYPE_ROTATION_VECTOR) {
SensorManager.getRotationMatrixFromVector(
mRotationMatrix, event.values);
float[] orientation = new float[3];
SensorManager.getOrientation(mRotationMatrix, orientation);
if (Math.abs(Math.toDegrees(orientation[0]) - angle) > 0.8) {
float bearing = (float) Math.toDegrees(orientation[0]) + mDeclination;
updateCamera(bearing);
}
angle = Math.toDegrees(orientation[0]);
}
}
這是有幫助的......我甚至不知道這個功能,謝謝。對我來說,它工作正常(v7) –
他,我想做同樣的事情,請分享你的解決方案,如果你已經這樣做。 –