iPhone,拨打另一个电话号码以回应第一个没有回答?

ang*_*son 21 iphone ios core-telephony

我正在尝试创建一个应用程序,该应用程序将在类似呼叫中心的列表上发起对优先级为1的联系人的呼叫.

然后,如果该联系人没有回答(让我们忘记在这里回答机器的整个问题),我想打电话给优先级2联系人,依此类推,直到他们中的一个回答或我耗尽我的名单.

这可能吗?

我尝试过以下方法:

  1. 挂钩进入CTCallCenter.CallEventHandler事件,并检查呼叫状态CTCallStateConnectedCTCallStateDisconnected,我得到它来响应呼叫断开的事实,没有连接,然后尝试启动另一个呼叫,就像我做的第一次,但第二次尝试只是坐死在水里.
  2. 覆盖DidEnterBackground方法,并定期检查CTCall.CallState属性,基本上再次尝试响应从未连接的断开连接,但这似乎不起作用

在尝试下一次拨号之前检测到断开状态后,我还尝试添加一个短暂的延迟(1秒,2.5秒和10秒),以允许电话应用程序在中止呼叫后"安定下来",这没有任何改变.

Mik*_*keG 7

我认为这可以在电话目的地更好地解决.我要么让电话公司配置"跟我来"服务,使用Twilio或其他一些第三方服务(如已经建议的那样),或者使用像Asterisk这样的东西配置我自己的PBX (Asterisk包括配置"跟我来"类型的能力行为).它为您提供了更多的灵活性和控制,即使您确实找到了在iOS中本地执行此操作的方法.

话虽如此,我确实让它在iOS中工作,假设如下:

  1. 您的应用启动了通话.
  2. 电话应用程序已打开,拨打该号码并断开连接.
  3. 用户明确返回到您的应用.如果您在应用程序背景时设法获取事件,我想知道更多:-).
  4. 在将控制权返还给您的应用程序后,将发送电话事件并启动新呼叫.

我在UIApplicationDelegate didFinishLaunchingWithOptions方法中有以下代码片段:

// In appdelegate header, ct is declared as @property (strong, nonatomic) CTCallCenter *ct; 
self.ct = [[CTCallCenter alloc] init];
self.ct.callEventHandler = ^(CTCall *call) {
    if (call.callState == CTCallStateConnected) {
        // do some state management to track the call
    } else if (call.callState == CTCallStateDisconnected) {
        // check that this is the expected call and setup the
        // new phone number
        NSURL *telURL = [NSURL URLWithString:myNewNumberURL];
        [application openURL:telURL];    
    }     
};
Run Code Online (Sandbox Code Playgroud)

这将进行新的通话.我正在使用iOS 5 SDK; 在iPhone 4s上测试过.

编辑:

使用返回到应用程序行为后,本机代码中的电话调用不同于UIWebView作为起点,我设法让这个工作.请注意,为了清晰起见,我对内存管理进行了抨击.假设您在调用完成后使用Web视图技术返回应用程序,请在调用已完成块中尝试以下操作:

else if (call.callState == CTCallStateDisconnected) {
    // check that this is the expected call and setup the
    // new phone number
    NSURL *telURL = [NSURL URLWithString:myNewNumberURL];
    dispatch_async(dispatch_get_main_queue(), ^{
        UIWebView *callWebview = [[UIWebView alloc] init]  ;
        [self.window.rootViewController.view addSubview:callWebview];
        [callWebview loadRequest:[NSURLRequest requestWithURL:telURL]]; 
        // and now callWebView sits around until the app is killed....so don't follow this to the letter.  
    });
}
Run Code Online (Sandbox Code Playgroud)

但是,这可能不会给你你想要的东西.用户将收到每个呼叫请求的提醒,提供取消呼叫的机会.