2013-04-04 44 views
3

我用做电话从我的应用程序:如何确定应用程序是从电话返回还是从后台恢复?

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

当用户结束通话时,默认苹果提供的电话应用程序转到后台和我的应用程序的简历重点。这是自动发生的。

现在,这里就是我想要的:我想每一次(且仅当)从呼叫用户返回到调用方法。

我试图从applicationWillEnterForeground:applicationDidBecomeActive:调用此方法,但这些回调在其他时间发射时的应用正在从后台状态(我不想)推出。

我想确定我的应用正在从后台状态启动,或者如果它是从一个电话回来,所以我只能在前者的情况下,而不是后者执行特定任务。有任何想法吗?

---- ----编辑

下面是我终于做到了:

参见: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 
     } 
    }; 
} 

回答

1

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

ex。

[[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 
} 
+2

这正是我一直在做的。但是这种方法存在问题。每次调用openURL:方法进行调用时,都会提示用户在哪里可以“调用”或“取消”。如果用户取消该怎么办?在这种情况下,在启动openURL:方法之前将“DidStartPhoneCall”标志设置为YES是不正确的?所以这在这种情况下不起作用。 – NSExplorer 2013-04-04 18:08:09

+0

也许只设置标志,当'openUrl'方法返回'YES'? – thelaws 2013-04-04 18:14:14

+1

返回YES'取消'以及'Call':( – NSExplorer 2013-04-04 19:54:52