在我的应用程序中,我有一个位置监听器,它记录了位置的准确性,并在我所在的地图上放置了一个标记,但精确度始终在900左右,我的位置在0.2到0.5英里之外的地方我实际上是。如果我加载谷歌地图,它会在几米内获得我的位置。
有什么方法可以确保准确的位置?我在Manifest中有这些权限
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
这是我的倾听者
LocationListener searchUsingLocation = new LocationListener() {
@Override
public void onLocationChanged(Location location) {
float accuracy = location.getAccuracy();
Log.d("FUApp", "Location changed: "+accuracy);
List<JSONObject> centres = sortVenuesByNearest(location);
try {
populateList(centres);
} catch (JSONException e) {
e.printStackTrace();
}
setRefreshActionButtonState(false, R.id.search_using_location);
}
@Override
public void onStatusChanged(String s, int i, Bundle bundle) {
}
@Override
public void onProviderEnabled(String s) {
}
@Override
public void onProviderDisabled(String s) {
}
};
Log.d("FUApp", "Starting request");
locationService.requestLocationUpdates(LocationManager.NETWORK_PROVIDER, 50, 5, searchUsingLocation);
编辑:此外,我的手机设置,访问位置,GPS Satelites已打开,Wi-Fi&amp;移动网络位置也在。
答案 0 :(得分:10)
Android试图掩盖我们的硬件现实,但实际上只有两个位置提供商:GPS和网络。 GPS位置很慢,并非所有设备都有,但它是准确的。网络位置更快,几乎所有设备都支持,但准确性较低。
如果你知道你想要哪个提供商,最好明确指定它。您的应用程序可以与任一提供商合作,您可能想要让用户选择他想要使用的内容。不要依赖Android告诉你的东西,因为大多数便宜的设备都是可怕的配置,并且可能骗你。
答案 1 :(得分:4)
你只是在听LocationManager.NETWORK_PROVIDER
。如果您想要更高的准确性,您必须倾听其他提供商,但请等一下:)
Google通过融合位置提供商改进了地图和位置管理。 https://developer.android.com/google/play-services/location.html
融合位置;您不需要查询最佳位置提供程序。如果您想获得高精度,只需将其设置为位置请求。
setPriority(LocationRequest.PRIORITY_HIGH_ACCURACY)
答案 2 :(得分:0)
前几天我遇到了同样的问题。我已将setPriority()
更改为PRIORITY_BALANCED_POWER_ACCURACY
。它给我准确的位置,最多可达10米。
取代此行 mLocationRequest.setPriority(LocationRequest.PRIORITY_HIGH_ACCURACY);
添加此行
mLocationRequest.setPriority(LocationRequest.PRIORITY_BALANCED_POWER_ACCURACY);
我的建议是使用
PRIORITY_BALANCED_POWER_ACCURACY
。