기기의 회전, 동작 및 위치 센서의 방향을 처리하는 방법에 대한 많은 스레드가 있습니다. 나는 내 차에서 사용할 응용 프로그램을 만들고 싶습니다. 먼저 차의 회전 각도를 측정하고 싶습니다. 그래서 저는 전화를 휴대 전화 케이스에 넣었습니다. 예를 들어 차로 왼쪽으로 돌아 가면 차의 회전 각도를 전화로보고 싶습니다.Android 휴대 전화로 자동차 회전 측정
자기 및 가속도계로 가능합니까?
나는 처음에는 괜찮다고 생각하는 코드를 게시합니다.
private static SensorManager sensorService;
//magnetic
private Sensor mSensor;
//accelerometer
private Sensor gSensor;
private float[] mValuesMagnet = new float[3];
private float[] mValuesAccel = new float[3];
private float[] mValuesOrientation = new float[3];
private float[] mRotationMatrix = new float[9];
@Override
public void onCreate(Bundle savedInstanceState) {
nf.setMaximumFractionDigits(2);
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
sensorService = (SensorManager) getSystemService(Context.SENSOR_SERVICE);
this.mSensor = sensorService.getDefaultSensor(Sensor.TYPE_MAGNETIC_FIELD);
this.gSensor = sensorService.getDefaultSensor(Sensor.TYPE_ACCELEROMETER);
sensorService.registerListener(this, gSensor, SensorManager.SENSOR_DELAY_NORMAL);
sensorService.registerListener(this, mSensor, SensorManager.SENSOR_DELAY_NORMAL);
}
@Override
public void onAccuracyChanged(Sensor arg0, int arg1) {
}
@Override
public void onSensorChanged(SensorEvent event) {
switch (event.sensor.getType()) {
case Sensor.TYPE_ACCELEROMETER:
System.arraycopy(event.values, 0, mValuesAccel, 0, 3);
break;
case Sensor.TYPE_MAGNETIC_FIELD:
System.arraycopy(event.values, 0, mValuesMagnet, 0, 3);
break;
}
SensorManager.getRotationMatrix(mRotationMatrix, null, mValuesAccel, mValuesMagnet);
SensorManager.getOrientation(mRotationMatrix, mValuesOrientation);
// double azimuth = Math.toDegrees(mValuesOrientation[0]); //azimuth, rotation around the Z axis.
// double pitch = Math.toDegrees(mValuesOrientation[1]); // pitch, rotation around the X axis.
double roll = Math.toDegrees(mValuesOrientation[2]); //roll, rotation around the Y axis.
//normalize
// azimuth = azimuth>0?azimuth:azimuth+360;
roll = roll>0?roll:roll+360;
String txt = "roll= "+Math.round(roll);
((EditText)findViewById(R.id.szog)).setText(txt);
}
질문 (의 내가 처음에 대해 너무 풍경 내 전화 "Portait입니다"모드를하지 개최 가정 해 봅시다) : 을 - 얼마나 정확 것이다 자동차에서이 응용 프로그램? (정확하게하려면 어떻게해야합니까?) - "가로 모드"로 휴대 전화를 들고있을 때 어떻게해야합니까? 오리엔테이션의 롤이 여전히 괜찮습니까?
너무 많은 작업이 있으므로 처음 시도하는 점에 유의하십시오. 하지만 먼저 내가 어떻게 그걸 얻을 수 있는지보고 싶습니다
고마워요!
중력/자기장이 더 나은 콤보 인 것처럼 보이므로 시도해 보겠습니다. 이 콤보는 매우 느린 속도 측정에도 사용할 수 있습니까? (3-5km/h) – user1552747
속도 측정과 관련이 없다고 생각합니다. – Stochastically
고마워요. 제 질문에 대한 대답은 괜찮습니다. (이제는 내 응용이 훨씬 좋습니다!). 시간이 있다면 조언을 해주십시오. 느린 속도 측정에 적합한 센서는 무엇입니까? 감사! – user1552747