如何确定某个应用是通过电话回来还是从后台恢复?

时间:2013-04-04 17:41:01

标签: iphone ios objective-c

我使用以下方式从我的应用程序拨打电话:

[[UIApplication sharedApplication] openURL:[NSURL URLWithString:@"telprompt://XXXXXXXXXX"]];

当用户结束通话时,默认的Apple提供的手机应用程序会转到后台,我的应用程序将继续关注。这会自动发生。

现在这就是我想要的:我想每次(并且仅当)用户从通话中返回时调用方法。

我尝试从applicationWillEnterForeground:applicationDidBecomeActive:调用此方法,但是当应用程序从后台状态(我不想要)启动时,其他时候会触发这些回调。

我想确定我的应用程序是从后台状态启动还是从电话呼叫返回,因此我只能在前一种情况下执行某项任务而不是后者。有什么想法吗?

---- ---- EDIT

以下是我最终的表现:

请参阅:CallStateDisconnected only detected for incoming calls, not for calls made from my app

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {

    [self listenForCalls];
}

- (void)listenForCalls {

    self.callCenter = [[CTCallCenter alloc] init];
    self.callCenter.callEventHandler = ^(CTCall* myCall) {
        NSString *call = myCall.callState;
        if([call isEqualToString:CTCallStateDialing]) {
              //do ur stuff
        }
    };
}

2 个答案:

答案 0 :(得分:2)

您可以使用电话框架,它为您提供呼叫状态以确定电话的状态。 你可以从这里找到详细信息: http://developer.apple.com/library/ios/#documentation/NetworkingInternet/Reference/CTCall/Reference/Reference.html#//apple_ref/doc/uid/TP40009590

答案 1 :(得分:1)

为什么不保存一个标记,表明您的应用已将用户发送到电话。当您的应用程序变为活动状态时,如果设置了该标志,请从电话呼叫方法返回。

离。

[[NSUserDefaults standardUserDefaults] setBool:YES forKey:@"DidStartPhoneCall"];
[[UIApplication sharedApplication] openURL:[NSURL URLWithString:@"telprompt://XXXXXXXXXX"]];

然后就像,

-(void)applicationDidBecomeActive {
    BOOL activeFromCall = [[NSUserDefaults standardUserDefaults] objectForKey:"DidStartPhoneCall"]
    if(activeFromCall && [activeFromCall boolValue] == YES) {
     // do your method 
    }
    [[NSUserDefaults standardUserDefaults] setBool:NO forKey:@"DidStartPhoneCall"]; // reste flag
}