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

iphone - 在后台无法获取位置更改通知


                                            <p><p>我的应用需要在后台使用定位服务。所以我添加了以下方法</p>

<pre><code>- (void)startStandardUpdates
{
    // Create the location manager if this object does not
    // already have one.
    if (nil == locationManager)
      locationManager = [ init];

    locationManager.delegate = self;
    locationManager.desiredAccuracy = kCLLocationAccuracyKilometer;

    // Set a movement threshold for new events.
    locationManager.distanceFilter = 500;

    ;
}
</code></pre>

<p>根据 <a href="https://developer.apple.com/library/ios/#documentation/UserExperience/Conceptual/LocationAwarenessPG/CoreLocation/CoreLocation.html" rel="noreferrer noopener nofollow">apple&#39;s</a>文件,它说当位置发生变化时,应用程序会收到通知,即 <code>- (void) locationManager:(CLLocationManager *)manager didUpdateToLocation:(CLLocation *)newLocation fromLocation:(CLLocation *)oldLocation</code>委托(delegate)方法将被调用。</p>

<p>为了做一些后台处理(延长处理时间)我在上面指定的委托(delegate)方法中添加了<code>ExpirationHandler</code>如下</p>

<pre><code>- (void) locationManager:(CLLocationManager *)manager didUpdateToLocation:(CLLocation *)newLocation fromLocation:(CLLocation *)oldLocation {
    UIApplication *app = ;
    bgTask = [app beginBackgroundTaskWithExpirationHandler:^{
      bgTask = UIBackgroundTaskInvalid;
    }];

    longitude = newLocation.coordinate.longitude;
    latitude = newLocation.coordinate.latitude;

    //Making webservice
    ;
}
</code></pre>

<p>在完成网络服务请求后,我停止了后台任务,如下所示</p>

<pre><code>[ endBackgroundTask:bgTask];
bgTask = UIBackgroundTaskInvalid;
</code></pre>

<p>如果我在完成 Web 服务请求后没有停止后台任务,一切都会按预期工作(能够获得位置更改通知)。但是,如果我在完成请求后停止了后台任务,则在应用程序处于后台时,我无法获得位置更改通知,并且状态栏中的位置服务图标消失.....</p>

<p>我已经搜索了很多来解决问题...这是在后台获取位置更改并更新服务器更改的正确方法吗?如果没有,有人可以提出更好的方法吗?非常感谢任何帮助.....</p></p>
                                    <br><hr><h1><strong>Best Answer-推荐答案</ strong></h1><br>
                                            <p><p>如果您想在应用程序处于后台时更新位置变化,Apple 要求您在 info.plist 中指定应用程序的后台模式(本例中为 <strong>location</strong>)。 </p>

<p>您需要使用的 key 是 <a href="http://developer.apple.com/library/ios/#documentation/general/Reference/InfoPlistKeyReference/Articles/iPhoneOSKeys.html" rel="noreferrer noopener nofollow">UIBackgroundModes</a> </p></p>
                                   
                                                <p style="font-size: 20px;">关于iphone - 在后台无法获取位置更改通知,我们在Stack Overflow上找到一个类似的问题:
                                                        <a href="https://stackoverflow.com/questions/15767989/" rel="noreferrer noopener nofollow" style="color: red;">
                                                                https://stackoverflow.com/questions/15767989/
                                                        </a>
                                                </p>
                                       
页: [1]
查看完整版本: iphone - 在后台无法获取位置更改通知