fusedLocation API 间隔与关闭 GPS 无线电有何关系
Posted
技术标签:
【中文标题】fusedLocation API 间隔与关闭 GPS 无线电有何关系【英文标题】:How does the fusedLocation API interval relate to turning off the GPS radio 【发布时间】:2016-06-18 23:54:21 【问题描述】:假设我使用 android 融合位置 API 来请求高精度位置报告。例如,
mLocationRequest = new LocationRequest();
mLocationRequest.setInterval(FASTEST_UPDATE_INTERVAL*2);
mLocationRequest.setFastestInterval(FASTEST_UPDATE_INTERVAL);
mLocationRequest.setPriority(LocationRequest.PRIORITY_HIGH_ACCURACY);
LocationServices.FusedLocationApi
.requestLocationUpdates(mGoogleApiClient, mLocationRequest, this)
这导致我的位置监听器在每个 FASTEST_UPDATE_INTERVAL 被调用。如果我将 FASTEST_UPDATE_INTERVAL 设置为短,我知道 GPS 无线电在位置更新之间不会关闭。我从各种来源知道这一点,例如 Fused Location Provider unexpected behavior 和 https://www.quora.com/Why-does-GPS-use-so-much-more-battery-than-any-other-antenna-or-sensor-in-a-smartphone。
我的问题是 FASTEST_UPDATE_INTERVAL 的最小值是多少,它会导致 GPS 无线电在两次位置更新之间关闭?
我预计这个问题不会有明确的答案,这将取决于手机硬件、Google Play 版本以及可能的其他硬件和软件因素。尽管如此,一般性的答案会有所帮助。
这个问题很重要,因为我对使用高精度定位但尽量减少电池使用感兴趣。如果可以节省电量,我很乐意增加 FASTEST_UPDATE_INTERVAL。
如果 google 融合定位服务使用设备的运动检测器(如果存在)在设备静止时进行计算,如果是这样,只需关闭 GPS 无线电,直到设备移动。
【问题讨论】:
【参考方案1】:即使您找到了答案,我也不指望它在设备、操作系统版本或 Google Play 版本之间保持不变。如果您绝对不想要 GPS,请不要使用融合提供商。使用基础 LocationManager 中的网络提供商。
至于使用运动检测器 - 它们不存在。它有一个加速度计,但对于一个加速度计保持静止并以恒定的 50mph 行驶看起来完全一样(以恒定速度行驶是 0 加速度)。无论如何,这可能不是一个好的优化——锁定多个 GPS 卫星需要几秒钟。如果有人想要准确,你不想一直打开和关闭它。
【讨论】:
您可能对当前设备中不存在的运动检测器是正确的。但如果它们还没有被使用,它们很快就会存在。有许多传感器融合协处理器可以检测运动,我知道一家硅公司将它们集成到他们的 ASIC 中。一个例子是pnicorp.com/products/sentral-sensor-fusion,它融合了陀螺仪、加速度计和磁传感器。您的观点仍然适用于当前的设备,因此我们不能指望 Android 将用于运动检测作为其融合定位软件的一部分。 可能,如果原始设备制造商认为它们有足够的用途为他们提供竞争优势。但即使每个 OEM 决定在 2016 年末将它们安装在所有旗舰设备中,根据平均周转率,它也不会在 5 年内影响大多数设备。目前,它们不存在。我也很好奇你认为他们如何做恒定运动,因为陀螺仪、加速度计和磁传感器不能。 使用 GPS、陀螺仪、加速度计和磁传感器的完全融合的定位服务可以轻松检测持续运动。这一切都在软件算法中。假设所有传感器都已启用,并且您每隔 10 秒收到三个准确的 GPS 读数,这些读数告诉您有一些持续的运动。您现在可以假设此运动保持不变,直到其他传感器告诉您其他情况。您可以关闭 GPS 无线电,直到其他传感器指示运动变化。 您需要比现在的手机更准确、噪音更小的传感器。特别是加速度计。您也不能像那样打开和关闭 GPS - 获取信号需要几秒钟到几分钟的时间,这使得相关性变得困难.. 最好让 GPS 保持开启状态。以上是关于fusedLocation API 间隔与关闭 GPS 无线电有何关系的主要内容,如果未能解决你的问题,请参考以下文章
融合的位置提供程序 setsmallestDisplacement 在 Android 中不起作用
当我在谷歌设置android中关闭和打开位置时,FusedLocation 不起作用
当 map.isMyLocationEnabled = false 时,FusedLocations 不会发送位置更新。奇怪的行为