我知道有类似的问题,但没有一个有帮助。
我的观察
有两种情况: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);
}
}