首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >FusedLocationProviderClient.requestLocationUpdates没有获得高度

FusedLocationProviderClient.requestLocationUpdates没有获得高度
EN

Stack Overflow用户
提问于 2017-10-10 08:18:02
回答 1查看 8.6K关注 0票数 2

我正在体验一些奇怪的行为,我们的Android应用程序使用融合位置提供商Api。

在某些设备中,此api 不返回高度

我可以在Moto G2d代上检查它,但我们的用户至少在Moto G3D生成、Nexus 6和Moto X Play上报告了相同的行为。在大多数其他设备中,高度恢复得很好,所以我非常肯定我对Api的实现是正确的。

有趣的是,我意识到如果我使用android.location.LocationManager,例如,像这样

代码语言:javascript
复制
mLocationManager.requestLocationUpdates(LocationManager.GPS_PROVIDER, 500, 0, locationListener);

这款应用程序开始接收高度,不仅在“LocationListener”订阅了“LocationManager”,而且还在“LocationCallback of Fused Location Provider Api”上。但是这破坏了融合位置提供程序Api所做的优化,使用这两种Api似乎很愚蠢。

如果我同时使用谷歌地图和我们的应用程序,我可以体验到类似的行为。虽然使用谷歌地图,我们的应用程序正在接收高度,但当谷歌地图关闭,融合位置提供商Api停止发送高度,以及。

当我说不接受高度时,我的意思是location.hasAltitude() == falselocation.getAltitude() == 0

这是我请求位置更新的实现:

代码语言:javascript
复制
LocationServices.getFusedLocationProviderClient(context);
LocationRequest currentLocationRequest = new LocationRequest();
currentLocationRequest.setInterval(500)
                .setFastestInterval(0)
                .setMaxWaitTime(0)
                .setSmallestDisplacement(0)
                .setPriority(LocationRequest.PRIORITY_HIGH_ACCURACY);
 fusedLocationProviderClient.requestLocationUpdates(currentLocationRequest, locationCallback);

在我看来,FusedLocationProviderClient并没有在这个设备上打开一些硬件设备,所以可能是这个Api上的一个bug,但是我没有发现其他人报告这个问题,除了这种类似的行为:

Nexus 6 Fused Location Provider getSpeed returns 0

谢谢。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-10-10 08:30:35

由于hasAltitude()返回false,所以FusedLocationProvider中缺少参数,这将使提供一个自信的高度成为可能。这在很大程度上取决于制造商的设置和设备功能,这也是供应商存在的原因之一。

原因也可能是GPS锁定不足或其他原因,但由于您可以将其缩小到某些设备上,所以我希望这不是问题所在。

您可以尝试(就像您已经做的那样)其他位置数据源,并检查它们的结果是否返回一个高度,但请记住,这可能是不一致的。我的第一次尝试将是旧的位置提供商。

但是,您无法修复FusedLocationProvider的错误行为,这是制造商配置失败。

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

https://stackoverflow.com/questions/46661793

复制
相关文章

相似问题

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