应用程序处于后台时,当电话呼叫结束时收到通知

时间:2016-10-04 14:24:06

标签: ios objective-c background phone-call core-telephony

我知道有类似的问题,但没有一个有帮助。

我的观察

有两种情况:1)当应用程序正在运行并且在前台时,对用户可见2)用户按下主页按钮,应用程序移动到后台,对用户不可见。在案例1)当一个电话来电结束时我得到所有的事件没有问题。在情况2)我没有事件,但当用户打开应用程序时,我得到应用程序在后台时发生的所有事件。

我的问题

即使app在后台,我怎样才能让我的代码正常工作?或者,当这些事件发生时,如何将我的应用程序从后台移动到前台?

我尝试了什么

我尝试在Info.plist的后台模式下启用后台获取,其实现为-(void)application:(UIApplication *)application performFetchWithCompletionHandler:(void (^)(UIBackgroundFetchResult))completionHandler。它没有效果。

以下是我的代码:

AppDelegate.m:

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions 
{
    // some other code above

    self.callCenter = [[CTCallCenter alloc] init];
    [self.callCenter setCallEventHandler:^(CTCall *call)
    {
        UINavigationController *nc = (UINavigationController *) [[(AppDelegate *) [[UIApplication sharedApplication] delegate] window] rootViewController];
        MainViewController *vc = nc.viewControllers[0];
        [vc setCallState:call.callState];
    }
}

MainViewController.m

-(void)setCallState:(NSString *)callStateString
{
    if ([callStateString isEqualToString:CTCallStateConnected])
    {
        NSLog(@"call connected!");
    } else if ([callStateString isEqualToString:CTCallStateDialing])
    {
        NSLog(@"call dialing!");
    } else if ([callStateString isEqualToString:CTCallStateDisconnected])
    {
        NSLog(@"call disconnected!");
    } else if ([callStateString isEqualToString:CTCallStateIncoming])
    {
        NSLog(@"call incoming!");
    } else
    {
        NSLog(@"unknown call state %@", callStateString);
    }
}

0 个答案:

没有答案