首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >安卓LocationManager locationManager.requestLocationUpdates()不工作

安卓LocationManager locationManager.requestLocationUpdates()不工作
EN

Stack Overflow用户
提问于 2017-05-10 13:57:47
回答 2查看 19.4K关注 0票数 3

嗨,伙计们,我正在尝试使用位置管理器获取当前位置,我正在使用以下代码

代码语言:javascript
复制
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);

但是我没有收到任何关于这行的回应

代码语言:javascript
复制
locationManager.requestLocationUpdates(bestProvider, 20000, 0,this);

我已经在清单和动态中添加了所有的权限,但是上面这行没有给出任何响应,我搜索了它,但是get和相关的答案,请帮助。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2017-05-10 14:05:22

对于getLastKnownLocation方法,在documentation中是这样说的:

如果提供程序当前已禁用,则返回null。

也就是说你的GPS被禁用了。

对于requestLocationUpdates,您每隔20秒请求一个位置,请尝试减少此数字,以便至少知道您的程序是否正在运行。

您可以尝试这样做:

代码语言:javascript
复制
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密钥。所有需要的信息都应该在链接中。

票数 1
EN

Stack Overflow用户

发布于 2017-05-10 14:47:44

代码语言:javascript
复制
String bestProvider =locationManager.getBestProvider(criteria,true);

在上面的代码行中,第二个布尔参数为true。这意味着它将获取已启用的提供程序。您的GPS_PROVIDER被禁用,这是通过locationManager.getLastKnownLocation返回null的事实来验证的。

此外,由于您请求BestProvier的标准为空,因此您的BestProvider必须是“被动的”。这意味着只有当其他应用程序请求和接收更新时,您才会收到位置更新。

在你的类的onLocationChangedMethod()中获取真实的位置更新。您必须确保以下几点:

  1. 确保您拥有ACCESS_FINE_LOCATION或ACCESS_COARSE_LOCATION之一,然后在运行时也请求它,您说您已经这样做了。
  2. 如果您想通过GPS_PROVIDER请求位置,则需要确保启用了GPS_PROVIDER,您可以使用以下代码执行此操作:

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;});

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/43884569

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档