无法访问本地通知和后台应用程序

时间:2014-07-28 12:38:53

标签: ios xcode ios7 uilocalnotification nsnotificationcenter

目标是通知最终用户有关应用在后台时更改的可访问性。

广播方法 NSNotificationCenter 无法在后台运行。 第二种方法我在 applicationDidEnterBackground 中尝试了 beginBackgroundTaskWithExpirationHandler 但与之相关的问题:

a) 10分钟的时间限制

b)我调用一个结束循环来检测在主线程上运行的可达性状态,结果它会阻塞UI。代码: -

-(void)applicationDidEnterBackground:(UIApplication *)application
{
    NSLog(@"Application entered background state.");
    // bgTask is a property of the class
    if (isUserLogin) {
    NSAssert(self.bgTask == UIBackgroundTaskInvalid, nil);

    bgTask = [application beginBackgroundTaskWithExpirationHandler: ^{
        dispatch_async(dispatch_get_current_queue(), ^{
            [application endBackgroundTask:self.bgTask];
            self.bgTask = UIBackgroundTaskInvalid;
        });
    }];

    dispatch_async(dispatch_get_current_queue(), ^{
        while ([application backgroundTimeRemaining] > 1.0) {
            curReach = [[utilities sharedUtility]reachabilityChanged];
            NetworkStatus netStatus = [curReach currentReachabilityStatus];
            NSLog(@"-----------back ground task------------");
            if (netStatus == ReachableViaWWAN || netStatus == ReachableViaWiFi) {
                //isNetworkMessagePopup = YES;
            }
            else{
//                if (isNetworkMessagePopup) {
//                    isNetworkMessagePopup = NO;
                    UILocalNotification *localNotif = [[UILocalNotification alloc] init];
                    if (localNotif) {
                        localNotif.alertBody = FORMAT_UNABLE_TO_CONNECT_SERVER_DUE_TO_NO_INTERNET;
                        localNotif.alertAction = NSLocalizedString(@"Read Message", nil);
                        localNotif.soundName = @"pushNotification.caf";
                        localNotif.repeatInterval = 5;
                        //localNotif.applicationIconBadgeNumber = 1;
                        [application presentLocalNotificationNow:localNotif];
                        [localNotif release];
                        break;
                //}
                }
            }
        }
        [application endBackgroundTask:self.bgTask];
        self.bgTask = UIBackgroundTaskInvalid;
    });
    }
}

请建议我可以在iOS中通知用户更改可访问性和应用程序处于后台状态吗?

如果是,那么我怎样才能做到这一点。

感谢。

1 个答案:

答案 0 :(得分:2)

您可以使用iOS App Programming Guide中所述的后台获取功能来检查覆盖能力,并在网络不可用时发布本地通知。

无法保证这种情况的调用频率 - 可能是每隔几分钟或更长时间 - 当然不是每隔几秒钟。