iOS startMonitoringForRegion 在睡眠模式下不起作用(黑屏)

Posted

技术标签:

【中文标题】iOS startMonitoringForRegion 在睡眠模式下不起作用(黑屏)【英文标题】:iOS startMonitoringForRegion didn't work in Sleep mode (black screen) 【发布时间】:2012-05-01 11:53:45 【问题描述】:

我正在尝试使用 startMonitoringForRegion 在 ios 中为 iPhone 4 编写一个应用程序,每次位置委托接收到位置更新时都会触发本地通知。

只要手机处于唤醒状态(屏幕亮起),应用程序运行良好,会触发通知,但是当我将手机置于睡眠状态(屏幕为黑色)时,我将在醒来之前不再收到通知按下home键打开手机

我尝试在 info.plist 中添加“必需的后台模式”-“应用程序注册位置更新”键,但这没有任何意义...

CLLocationManager 委托设置为 AppDelegate。

我需要做什么才能在设备处于睡眠状态时注册位置更新?提前致谢。

【问题讨论】:

【参考方案1】:

可能是应用关闭后CLLocationManager实例被释放了。

对我来说,我会创建一个带有 CLLocationManager 属性的单例位置管理器,并将委托设置为单例。之后,我会调用startMonitoringSignificantLocationChanges 方法来确保应用程序接收到位置更新。即使应用被杀死,它也能工作。

如果应用程序被杀死,我需要在应用程序委托didFinishLaunchingWithOptions 方法中实例化位置管理器单例:

if ([launchOptions objectForKey:UIApplicationLaunchOptionsLocationKey]) 
    //instantiate the singleton here
    NSArray *regions = [[[[LocationManager sharedManager] locationManager] monitoredRegions] allObjects];

我在这里详细解释了使用重大位置更改和标准位置服务之间的区别:location based push notification when app is not running?

【讨论】:

以上是关于iOS startMonitoringForRegion 在睡眠模式下不起作用(黑屏)的主要内容,如果未能解决你的问题,请参考以下文章

IO复用阻塞IO非阻塞IO同步IO异步IO

四种IO模型‘阻塞IO/非阻塞IO/信号驱动IO/异步IO‘

5种IO模型阻塞IO和非阻塞IO同步IO和异步IO

网络IO模型:同步IO和异步IO,阻塞IO和非阻塞IO

同步IO异步IO阻塞IO非阻塞IO之间的联系与区别

同步IO异步IO阻塞IO非阻塞IO之间的联系与区别