所以,我正在尝试为练习构建一个天气应用程序,我一直在试图找到这个位置的问题。我读过人们建议通过融合位置API使用getLastLocation,问题是如果他们还没有在设备上注册的位置它出现null。我注意到使用模拟器的时间很少见,但我仍然喜欢我的应用程序来正确处理它。您可能碰到的一个例子是,他们只是关闭并重新打开GPS,或者手机刚打开。我做的一件事是如果getLastLocation确实返回null,是请求更新,但是你仍然需要等待设备注册更新的位置,这与天气应用程序的所有数据都是基于你的'你'仍然有点遇到同样的问题。我注意到其他应用程序这不是问题,有时我实际上必须加载谷歌地图才能让它注册一个位置。 Google地图如何强制它更新位置?以下是我的getLocation方法的示例:
public void getLocation() throws SecurityException {
boolean gps_enabled;
LocationManager lm = (LocationManager) this.getSystemService(Context.LOCATION_SERVICE);
gps_enabled = lm.isProviderEnabled(LocationManager.GPS_PROVIDER);
if (gps_enabled) {
Location location = LocationServices.FusedLocationApi.getLastLocation(mGoogleApiClient);
if (location != null) {
startGetForecast(location);
} else {
LocationRequest request = LocationRequest.create();
request.setNumUpdates(1);
request.setPriority(LocationRequest.PRIORITY_HIGH_ACCURACY);
LocationServices.FusedLocationApi.requestLocationUpdates(mGoogleApiClient, request, this);
}
}
else {
AlertDialogFragment alertDialogFragment = new AlertDialogFragment();
alertDialogFragment.setErrorTexts("Location Unavailable", "Could not retrieve location information.", "Exit");
alertDialogFragment.show(getSupportFragmentManager(), "Location Unavailable");
}
}
答案 0 :(得分:1)
注意:这个答案可能听起来像没有直接回答问题但是在与OP聊天(有问题的评论)之后,因为他的代码一般都没问题,但问题围绕着问题,这个答案有满意的OP。
幸运的是,标准库不是Google可以获得的唯一方式 代码到你手中。除了标准库,谷歌 提供者播放服务。这是一组常见的服务 与Google Play商店应用程序一起安装。解决这个问题 位置一塌糊涂,Google在Play中发布了新的位置服务 服务称为融合位置提供商。
这些库 住在另一个应用程序中,你必须拥有该应用程序 安装。 这意味着只有具有Play商店应用的设备 已安装且最新的将能够使用您的应用程序。
所以结论是:
由于您使用的是融合位置提供程序Api,这意味着Api将自动确定以下某个来源的最后位置:
因此,您可以轻松地从代码中删除GPS
如果你想在上述资源中挖掘更多内容并且有很多在线资源。
资源:答案的第一部分,来源于:
Android编程:大型书呆子牧场指南
第2版
第31章第552页Google Play服务