2016-01-07 82 views
0

我想弄清楚如何正确处理对位置权限的更改。到目前为止,我使用委托方法处理更改:locationManager:didChangeAuthorizationStatus:。但我只能肯定这个应用程序在前台运行。如何在设置应用程序中处理对位置权限的更改

如果用户在“设置”应用中更改位置权限,会发生什么情况。如果应用没有运行,那么应用会在应用启动时看到更改,所以没关系。但是,如果应用程序被暂停,该应用程序将如何得到通知?代表方法locationManager:didChangeAuthorizationStatus:仍然在一个点上被调用吗?

+0

试试看吧发生了什么? – rmaddy

+1

@rmaddy我试过了,调用了委托方法,但是我不确定该应用是在后台还是暂停。根据[应用程序生命周期指南]有所不同(https://developer.apple.com/library/ios/documentation/iPhone/Conceptual/iPhoneOSProgrammingGuide/TheAppLifeCycle/TheAppLifeCycle.html)。我不知道那是什么之间的区别背景和暂停状态是。应用程序是否仍然可以从挂起状态轻松唤醒以触发委托方法并处理通知? –

回答

1

该应用程序在后台,但没有执行代码。系统会自动将应用程序移至此状态,并在此之前不会通知他们。 暂停时,应用会保留在内存中,但不会执行任何代码。 发生内存不足情况时,系统可能会在不通知的情况下清除暂停的应用程序,以便为前台应用程序腾出更多空间。

所以你的问题有一点细微之处。虽然应用程序特别处于挂起状态,但它不会运行任何代码。 但是,当位置状态改变时(假设你的应用程序调用了requestAlwaysAuthorization并且用户已经授予了访问权限),应用程序将被“唤醒”并放回到后台状态。从the iOS Developer Library

如果离开了显著变化位置服务运行和iOS应用随后被暂停或终止,在新的位置数据到达该服务会自动唤醒你的应用程序。在起床时间,应用程序被置于后台,您可以获得少量时间(大约10秒钟)以手动重新启动位置服务并处理位置数据。 (您必须手动在后台重新启动位置服务的任何未决的位置更新可交付之前

因此,要回答你的问题,应用程序不会在暂停状态下接收位置更新;但是,它被放置到后台状态,它最终确实收到位置更新

+0

'locationManager:didChangeAuthorizationStatus'你的意思是你会得到这个回调,如果你在后台或者最终被带到后台暂停?好 – Honey

相关问题