嗨,伙计们,我正在尝试使用位置管理器获取当前位置,我正在使用以下代码
LocationManager locationManager = (LocationManager)
getSystemService(Context.LOCATION_SERVICE);
Criteria criteria = new Criteria();
String bestProvider =locationManager.getBestProvider(criteria,true);
Location location =
locationManager.getLastKnownLocation(bestProvider);
if (location != null) {
onLocationChanged(location);
}
locationManager.requestLocationUpdates(bestProvider, 20000, 0,this);但是我没有收到任何关于这行的回应
locationManager.requestLocationUpdates(bestProvider, 20000, 0,this);我已经在清单和动态中添加了所有的权限,但是上面这行没有给出任何响应,我搜索了它,但是get和相关的答案,请帮助。
发布于 2017-05-10 14:05:22
对于getLastKnownLocation方法,在documentation中是这样说的:
如果提供程序当前已禁用,则返回null。
也就是说你的GPS被禁用了。
对于requestLocationUpdates,您每隔20秒请求一个位置,请尝试减少此数字,以便至少知道您的程序是否正在运行。
您可以尝试这样做:
LocationManager locationManager = (LocationManager) getSystemService(Context.LOCATION_SERVICE);
locationManager.requestLocationUpdates(LocationManager.GPS_PROVIDER, 0, 0, this);另外,我真的建议您使用新的API来请求位置更新:https://developer.android.com/training/location/receive-location-updates.html
它非常快速和准确,但您需要创建一个google developer帐户(免费)并创建一个api密钥。所有需要的信息都应该在链接中。
发布于 2017-05-10 14:47:44
String bestProvider =locationManager.getBestProvider(criteria,true);在上面的代码行中,第二个布尔参数为true。这意味着它将获取已启用的提供程序。您的GPS_PROVIDER被禁用,这是通过locationManager.getLastKnownLocation返回null的事实来验证的。
此外,由于您请求BestProvier的标准为空,因此您的BestProvider必须是“被动的”。这意味着只有当其他应用程序请求和接收更新时,您才会收到位置更新。
在你的类的onLocationChangedMethod()中获取真实的位置更新。您必须确保以下几点:
locationRequest = LocationRequest.create();LocationServices.SettingsApi.checkLocationSettings(googleApiClient,//或者其他一些优先级,具体取决于您的需求:locationRequest LocationRequest.create= LocationSettingsRequest.Builder LocationSettingsRequest.Builder() .addLocationRequest(locationRequest);builder.setAlwaysShow(true);PendingResult result = new builder.build();Result.setResultCallback( ResultCallback() { @Override public void onResult(LocationSettingsResult locationSettingsResult) { final Status = locationSettingsResult.getStatus();switch (status.getStatusCode(){ case LocationSettingsStatusCodes.SUCCESS: //满足所有位置设置。客户端可以//请求位置更新现在中断;如果LocationSettingsStatusCodes.RESOLUTION_REQUIRED: //位置设置不满足,但可以//通过向用户显示对话框来修复。status.startResolutionForResult(YourActivity.this,100);//第一个参数是您的活动实例中断;case LocationSettingsStatusCodes.SETTINGS_CHANGE_UNAVAILABLE: //不满足位置设置。但是,我们无法//修复这些设置,所以我们不会显示该对话框。Log.e("TAG",“错误:无法启用位置更新SETTINGS_CHANGE_UNAVAILABLE");break;});
https://stackoverflow.com/questions/43884569
复制相似问题