因此,我正在尝试构建一个用于练习的天气应用,并且遇到了尝试获取位置的问题。我读过有人建议通过融合的位置API使用getLastLocation,这是问题所在,如果他们尚未在设备上注册位置,则显示为null。我已经注意到使用仿真器的时间很少出现,但是我仍然希望我的应用能够正确处理它。您可能会遇到这种情况的一种情况是,它们只是关闭了GPS并重新打开,或者只是刚刚打开了手机。我所做的一件事是,如果getLastLocation确实返回空值,则是请求更新,但是您仍然必须等待设备注册更新的位置,而对于天气预报应用,所有数据均基于该位置,并且您仍然有点遇到同样的问题。一世' 注意到其他应用程序不是问题,例如有时我实际上必须加载Google Maps才能注册位置。Google Maps如何强制其更新位置?这是我的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");
}
}
注意:这个答案听起来好像不是直接回答问题,而是在与OP聊天(有问题的评论)之后,因为他的代码总体上还可以,但是围绕问题的条件,这个答案已经满足了OP。
幸运的是,标准库并不是Google掌握代码的唯一途径。除了标准库外,Google提供程序还提供Play服务。这是与Google Play商店应用程序一起安装的一组常见服务。为了解决此位置混乱的问题,Google在Play服务中提供了一个新的位置服务,称为融合位置提供程序。
由于这些库位于另一个应用程序中,因此您实际上必须安装该应用程序。这意味着只有安装了Play商店应用程序且最新的设备才能使用您的应用程序。
因此,结论是:
由于您使用的是Fused Location Provider Api,这意味着Api将自动从以下来源之一确定最后的位置:
因此,如果您的代码中有条件,则可以轻松删除GPS
如果您想挖掘更多内容,请在上述资源中找到更多信息,并且有很多在线资源。
资源:答案的第一部分,其来源来自:
Android编程:Google Play服务下的Big Nerd Ranch Guide
2nd Edition
第31章552页
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句