CLCircularRegion和唤醒应用程序

时间:2016-02-04 22:07:30

标签: ios objective-c iphone cllocationmanager clregion

在应用程序中,我们有类似iOS中的本机提醒应用程序的机制,当用户在某个地区进入或退出时会触发通知。

但是两个设备在同一时间表现不同(5和5s)。所有设备都有启用通知,并允许使用位置。

两个设备有一些“旅行”,并在路线上创造了10个点。第一个设备(5)在完成时只收到6个通知,(5s)没有收到任何通知。

但我的问题是我怎么知道我的应用程序何时在后台重启或继续工作。因为,所有登录应用程序我重定向到一个文件,并在下载容器后分析在旅行时间在应用程序中发生的事情。

当设备进入区域并且我的日志标记在文件中触发但未收到通知时,我注意到app重启的次数相同。当应用尝试从didFinishLaunchingWithOptions

中的网络服务获取一些信息时,这就会出现问题

也许这就是问题。如何知道区分重启应用程序或继续工作。 THX。

1 个答案:

答案 0 :(得分:1)

你在didFinishLaunchingWithOptions中检查UIApplicationLaunchOptionsLocationKey是否相似(对不起,Swift就是我现在拥有的):

func application(application: UIApplication, didFinishLaunchingWithOptions launchOptions: [NSObject: AnyObject]?) -> Bool {
    if launchOptions?[UIApplicationLaunchOptionsLocationKey] != nil {
        // app was launched in response to incoming location event
    }
}

此外,如果您尚未执行此操作,则可能需要以不同方式创建通知,如果应用在后台:

    // Show an alert if application is active
    if UIApplication.sharedApplication().applicationState == .Active {
        if let message = notefromRegionIdentifier(region.identifier) {
            if let viewController = window?.rootViewController {                    
                showSimpleAlertWithTitle(nil, message: message, viewController: viewController)
            }
        }
    }
    else {
        // Otherwise present a local notification:
        let notification = UILocalNotification()
        notification.alertBody = notefromRegionIdentifier(region.identifier)
        notification.soundName = "Default";
        UIApplication.sharedApplication().presentLocalNotificationNow(notification)
    }