菜鸟教程小白 发表于 2022-12-13 02:12:16

ios - 采用什么策略在后台监控用户位置?


                                            <p><p>我想<strong>在后台跟踪用户位置</strong>,以便在他靠近他的一位 friend 时向他显示警报。 </p>

<p>所以我从 <code>CLLocationManager</code> 开始。据我所知,即使用户重新启动 Iphone 或终止应用程序,它们也是让应用程序了解位置更新的唯一一种可靠方法:<code>startMonitoringSignificantLocationChanges</code>。但问题是,即使在一个有很多 wifi 的城市内,<code>startMonitoringSignificantLocationChanges</code> 会在用户移动 1 公里左右时触发 <code>DidUpdateLocations</code>,这对我的需求来说实在是太多了</p>

<p>另一方面,<code>startUpdatingLocation</code> 以良好的间隔触发 <code>DidUpdateLocations</code>(甚至太多,因为即使用户不移动它也会经常触发 <code>DidUpdateLocations</code></code>)。但是 <code>startUpdatingLocation</code> 在 iphone 重新启动或应用程序被用户杀死后无法生存。另外我怀疑即使精度为 100m,<code>startUpdatingLocation</code> 也会消耗大量电池。</p>

<p>所以问题是:<strong>我可以在我的应用中使用什么策略来有效地跟踪</strong>,而不会消耗太多电池<strong>全时用户位置</strong>?我需要大约 100m 的精度,如果可能的话,每条轨道的间隔在 2.5 到 5 分钟之间(我没有找到任何选项来指定在捕捉新位置之前等待的延迟)</p>

<p>其实我想这样做:</p>

<ul>
<li>2 个 <code>locationManager</code>、1 个 <strong>GPS</strong> 和 1 个 <strong>重大变化</strong> </li>
<li>当应用启动时,我使用 <strong>significantChangesLocationManager</strong>:<code>startMonitoringSignificantLocationChanges</code> 和 <code>startMonitoringVisits</code></li>
<li>我还调用 <strong>GPSLocationManager</strong> <code>startUpdatingLocation</code> 来检索准确的用户位置。我设置了 <code>PausesLocationUpdatesAutomatically(true)</code> 以便 <strong>GPSLocationManager</strong> 迟早会自行停止</li>
<li>在 <code>DidUpdateLocations</code> 由 <strong>GPSLocationManager</strong> 引发我开始使用 <strong>significantChangesLocationManager</strong></li>
</ul>

<p>您如何看待这种策略?</p></p>
                                    <br><hr><h1><strong>Best Answer-推荐答案</ strong></h1><br>
                                            <p><p>即使您会收到比您需要的更多的触发器,正如您已经说过的,您可以使用 <code>startMonitoringSignificantLocationChanges</code>。它以非常节能的方式实现。它允许应用程序被终止,并且只有在 iOS 认为设备发生重大移动时才会再次被唤醒。另一个优点是您的应用不需要 <em>location</em> 后台模式,这可能会在应用审核期间提出问题。</p>

<p><code>startUpdatingLocation</code> 让应用程序不断更新设备的位置,即使您只收到几个 <code>didUpdateLocations:</code> 事件。此外,iOS 在更新期间无法关闭应用程序,因此会消耗大量电池。</p>

<p>您也可以考虑使用地理围栏,在当前位置周围设置导出地理围栏。但是,重要的位置更新将更加可靠。一旦您已经离开地理围栏,退出地理围栏将不再触发,当手机在地理围栏内关闭并在外面重新打开时,可能会发生这种情况。此解决方案具有不需要后台模式的相同优点。</p>

<p>据我了解您的用例,<code>startMonitoringSignificantLocationChanges</code> 听起来是最佳选择。您无法控制它触发的确切时间间隔和距离,但它非常节能且易于使用。</p></p>
                                   
                                                <p style="font-size: 20px;">关于ios - 采用什么策略在后台监控用户位置?,我们在Stack Overflow上找到一个类似的问题:
                                                        <a href="https://stackoverflow.com/questions/45147002/" rel="noreferrer noopener nofollow" style="color: red;">
                                                                https://stackoverflow.com/questions/45147002/
                                                        </a>
                                                </p>
                                       
页: [1]
查看完整版本: ios - 采用什么策略在后台监控用户位置?