我使用以下方式从我的应用程序拨打电话:
[[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
}
};
}
答案 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
}