我正在使用Google Play定位服务来帮助用户沿路径导航,但我没有从Location
中收到的onLocationChanged(Location location)
对象获取指南针信息。我总是从hasBearing()
获得错误结果,getBearing()
在LocationListener
实现中返回0.0。
以下是我使用的代码,其中删除了噪音代码。它显示了用于创建LocationRequest
的参数。代码非常愉快地跳转到LocationListener
实现中,因此看起来我有一个适用于该系统部分的工作架构。
public class IncrementalNavigator {
private LocationClient locationClient;
private LocationRequest locationRequest;
private float headingBearing = 0.0f;
private LocationListener locationListener = new LocationListener() {
@Override
public void onLocationChanged(Location location) {
Log.d(TAG, "The location has changed to " + location.toString());
if (location.hasBearing()) {
// I never see this updated.
headingBearing = location.getBearing();
}
// ...
}
};
public IncrementalNavigator(LocationClient locationClient) {
this.locationRequest = LocationRequest.create();
this.locationRequest.setPriority(LocationRequest.PRIORITY_HIGH_ACCURACY);
this.locationRequest.setInterval(5000);
this.locationRequest.setFastestInterval(1000);
this.locationClient = locationClient;
this.headingBearing = locationClient
.getLastLocation()
.getBearing();
// ...
}
public void setWalkingDirections(WalkingDirections walkingDirections) {
// ...
if (walkingDirections != null) {
// ...
this.locationClient.requestLocationUpdates(locationRequest, locationListener);
} else {
this.locationClient.removeLocationUpdates(locationListener);
}
}
// ...
}
我的AndroidManifest.xml声明了以下权限:
<uses-permission android:name="android.permission.ACCESS_LOCATION"/>
<uses-permission android:name="android.permission.ACCESS_LOCATION_EXTRA_COMMANDS"/>
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION"/>
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION"/>
<uses-permission android:name="android.permission.INTERNET"/>
我在使用Android 4.3的Galaxy Nexus上运行代码作为Service
的一部分。 WiFi已开启且GPS已开启。我的问题是:为什么我没有收到轴承更新?
答案 0 :(得分:1)
此代码功能正常,它不是获取罗盘承载数据的正确方法。在户外使用应用程序并获得GPS修复后,我能够获得新的读数。我已经重新阅读了documentation并且已经意识到位置上的方位不是罗盘方位(即北方不 0.0),而是水平方向。强>