即使启用了所有位置服务,Google 位置服务 getBestProvider 也会返回 null
Posted
技术标签:
【中文标题】即使启用了所有位置服务,Google 位置服务 getBestProvider 也会返回 null【英文标题】:Google Location Services getBestProvider will return null even though all location services are enabled 【发布时间】:2013-06-21 01:59:49 【问题描述】:即使地图应用程序显示正确的位置,位置服务 getBestProvider 调用仍返回 null。 FINE_LOCATION 和 COARSE_LOCATION 的权限在清单中。
public static Location getLocation(Context context)
LocationManager locationManager = (LocationManager) context.getSystemService(Context.LOCATION_SERVICE);
Criteria criteria = new Criteria();
Location myLocation = locationManager.getLastKnownLocation(locationManager.getBestProvider(criteria, false));
return myLocation;
非常感谢任何帮助,因为这是我第一次使用定位服务。提前谢谢你。
【问题讨论】:
我猜你也在使用无论您使用哪个提供商 GPS、NETWORK 或最好的,都遵循从本地(在设备上)缓存中获取位置的相同原则。
试试这个实验。更改您的physical
位置(四处走动,距您现在的位置约 200m)并加载谷歌地图,突然间您的应用程序也会返回正确的坐标。那是因为谷歌地图知道如何触发本地缓存更新。我(幸运的是)找到了触发缓存更新的方法。
在你的 getLastKnownLocation 和魔法发生之前调用它。
HomeScreen.getLocationManager().requestLocationUpdates(
LocationManager.NETWORK_PROVIDER, 0, 0, new LocationListener()
@Override
public void onStatusChanged(String provider, int status, Bundle extras)
@Override
public void onProviderEnabled(String provider)
@Override
public void onProviderDisabled(String provider)
@Override
public void onLocationChanged(final Location location)
);
或者使用 LocationClient。用于位置更新的新 API。
【讨论】:
这就是解决方案。我不得不在提供者上调用 requestLocationUpdates。getLastKnownLocation
返回 LAST KNOWN 位置,如果您想要 CURRENT 位置,您显然必须请求更新!如果您想要一个位置,请使用requestSingleUpdate
。使用requestLocationUpdates
和0, 0
将触发定期更新并耗尽电池!将日志行添加到 onLocationChanged
以查看它被调用的频率。
我将对其进行测试并相应地编辑我的答案。谢谢。【参考方案2】:
尝试使用 locationmanager.getBestProvider() 的插入,看看它现在是否有效:
String locationProvider = LocationManager.NETWORK_PROVIDER;
Location lastKnownLocation = locationManager.getLastKnownLocation(locationProvider);
此外,如果您将 false 传递给 getBestProvider(),无论是否打开,它都会返回最佳 Provider,它仅取决于您的 Criteria,因此它可能会返回 null,例如,如果您没有手动启用 GPS。
您可能需要查看此链接:http://developer.android.com/reference/android/location/LocationManager.html#getBestProvider(android.location.Criteria, boolean)
【讨论】:
您上面提到的答案已包含在我的答案中。不管你选择哪一个,你能把这篇文章标记为已回答吗?谢谢 事实证明这不是解决方案。我刚刚注意到这是您答案的一部分。 悉达多有正确的解决方案。我只需要拨打 GPS、NETWORK 和 PASSIVE 提供商的电话。【参考方案3】:我建议你使用新的 location api,你可以在 google_play_services_lib (https://github.com/chrulri/google-play-services_lib) 中找到它。只需将其作为 android 库项目添加到您的项目中即可。这个库的最大优点是您不必处理 GPS 和 NETWORK 的东西,它会自动决定使用哪一个。
在此处了解更多信息:
https://developer.android.com/google/play-services/location.html
【讨论】:
以上是关于即使启用了所有位置服务,Google 位置服务 getBestProvider 也会返回 null的主要内容,如果未能解决你的问题,请参考以下文章
即使在后台,如何使用 Google 位置服务 API 来获取位置更新?
Android:使用 Fused Location Provider 检查是不是启用了位置服务