使用Location.getBearing();
我似乎随意更换轴承。
Aka,我可以慢慢转动设备,它不会注意到,它只选择自己的随机轴承。
我知道设备正在运行,因为平板电脑上的地图应用中的“你在这里”图标会随着我旋转设备而缓慢旋转。
是否有不同的正确方法?我正在使用GPS。也许有更好的方法来确定你面临的方向。
答案 0 :(得分:3)
Location.getBearing()
返回GPS卫星为您计算的方位。它不是您设备标题的实时表示。 Google地图应用使用设备的内置G传感器来获取您所面临的方向。
答案 1 :(得分:3)
尝试使用加速计传感器和磁场(G-)传感器。
这是一个教程:http://android-coding.blogspot.co.at/2012/03/create-our-android-compass.html
答案 2 :(得分:0)
根据herom的回答,使用以下链接:http://android-coding.blogspot.co.at/2012/03/create-our-android-compass.html
我扩展了我的课程以实现传感器:extends Activity implements SensorEventListener
按照建议实施,但修改它以考虑屏幕的方向。
以下是我使用的代码:
@Override
public void onSensorChanged(SensorEvent event) {
switch(event.sensor.getType()){
case Sensor.TYPE_ACCELEROMETER:
for(int i =0; i < 3; i++){
valuesAccelerometer[i] = event.values[i];
}
break;
case Sensor.TYPE_MAGNETIC_FIELD:
for(int i =0; i < 3; i++){
valuesMagneticField[i] = event.values[i];
}
break;
}
boolean success = SensorManager.getRotationMatrix(
matrixR,
matrixI,
valuesAccelerometer,
valuesMagneticField);
if(success){
SensorManager.getOrientation(matrixR, matrixValues);
double azimuth = Math.toDegrees(matrixValues[0]);
//double pitch = Math.toDegrees(matrixValues[1]);
//double roll = Math.toDegrees(matrixValues[2]);
WindowManager mWindowManager = (WindowManager) getSystemService(WINDOW_SERVICE);
Display mDisplay = mWindowManager.getDefaultDisplay();
Float degToAdd = 0f;
if(mDisplay.getRotation() == Surface.ROTATION_0)
degToAdd = 0.0f;
if(mDisplay.getRotation() == Surface.ROTATION_90)
degToAdd = 90.0f;
if(mDisplay.getRotation() == Surface.ROTATION_180)
degToAdd = 180.0f;
if(mDisplay.getRotation() == Surface.ROTATION_270)
degToAdd = 270.0f;
mapView.setFacingDirection((float) (azimuth + degToAdd)); //DEGREES NOT RADIANS
}
}