3

我使用以下应用程序拨打电话:

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

当用户结束通话时,Apple 提供的默认电话应用程序进入后台,我的应用程序恢复焦点。这会自动发生。

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

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

我想确定我的应用程序是从后台状态启动还是从电话返回,所以我只能在前一种情况下而不是后一种情况下执行某个任务。有任何想法吗?

- - 编辑 - -

这是我最终做到的方式:

请参阅:CallStateDisconnected 仅检测到来电,而不是从我的应用程序发出的呼叫

- (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
        }
    };
}
4

2 回答 2

2

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

于 2013-04-05T08:10:05.560 回答
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
}
于 2013-04-04T17:57:23.063 回答