我想通过说我在中国,谷歌定位服务有时会遇到问题。
我正在使用LocationClient
来获取用户的当前位置。
protected void onCreate(Bundle savedInstanceState) {
...
mLocationClient = new LocationClient(this, this, this);
...
}
非常直截了当。然后在我的onConnected
回调中,我找到了位置。
public void onConnected(Bundle connectionHint) {
Location location = mLocationClient.getLastLocation();
...
}
我回来的位置总是一样的,但距离我的实际位置约500米。 GPS已启用,但表示正在使用的图标未亮起。我也在WiFi上,有3G。
当我打开实际的Google地图应用时,我的位置非常准确(与我在自己的应用中获得的位置不同)。我还看到了表示正在使用GPS的图标。
问题
谢谢!
答案 0 :(得分:3)
使用'getLastLocation()'方法时,它提供了Location所存储的最佳已知位置。它也与您在清单文件中给予应用程序的权限级别有关。
尝试同时使用:
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />
清单文件中的,看看它是否提高了准确性。
答案 1 :(得分:1)
广告。 1 Google地图不断更新位置。请尝试按照以下方法进行操作:http://developer.android.com/training/location/receive-location-updates.html
广告。 2 getLastLocation可能会检索更新时存储的最后位置,如第1点所示。如果未更新,则只会得到相同的值。位置对象有附加时间,您可以看到它何时被收到。
答案 2 :(得分:1)
Baidu等其他地图提供商强制您使用自己的LocationClient自定义实现。通过这种方式,您可以准备好在地图图块上使用这些位置。
答案 3 :(得分:1)
中国对GPS数据进行了特殊处理,因为政府迫使相关地图制作公司增加了一些偏见。 我坚持了一段时间。
答案 4 :(得分:0)
迟到的回答,但是没有说过:
您可以使用locationRequest设置locationClient的准确性。 E.g。
mLocationRequest = LocationRequest.create();
mLocationRequest.setPriority(LocationRequest.PRIORITY_HIGH_ACCURACY);
mLocationClient.requestLocationUpdates(mLocationRequest, (LocationListener) this);
您还可以设置更新频率。如果您需要高度精确的东西,请在几秒钟内读取一堆读数。然后查看每次阅读的“准确度”数字。丢弃任何读数,其准确性明显低于其他读数。然后平均其余的......
这是一个非常基本的算法,我在美国的星系S5上获得1-2英尺内的准确度。
如果您使用较低的准确度,那么将使用wifi和蜂窝结果平均gps数据。 GPS消耗更多电池,因此在此设置下使用它的次数较少。 Wifi使用物理地址查找,因为它总是让我走向我家附近的公共道路,即使我在它的中间。