ang*_*son 21 iphone ios core-telephony
我正在尝试创建一个应用程序,该应用程序将在类似呼叫中心的列表上发起对优先级为1的联系人的呼叫.
然后,如果该联系人没有回答(让我们忘记在这里回答机器的整个问题),我想打电话给优先级2联系人,依此类推,直到他们中的一个回答或我耗尽我的名单.
这可能吗?
我尝试过以下方法:
CTCallCenter.CallEventHandler事件,并检查呼叫状态CTCallStateConnected和CTCallStateDisconnected,我得到它来响应呼叫断开的事实,没有连接,然后尝试启动另一个呼叫,就像我做的第一次,但第二次尝试只是坐死在水里.DidEnterBackground方法,并定期检查CTCall.CallState属性,基本上再次尝试响应从未连接的断开连接,但这似乎不起作用在尝试下一次拨号之前检测到断开状态后,我还尝试添加一个短暂的延迟(1秒,2.5秒和10秒),以允许电话应用程序在中止呼叫后"安定下来",这没有任何改变.
我认为这可以在电话目的地更好地解决.我要么让电话公司配置"跟我来"服务,使用Twilio或其他一些第三方服务(如已经建议的那样),或者使用像Asterisk这样的东西配置我自己的PBX (Asterisk包括配置"跟我来"类型的能力行为).它为您提供了更多的灵活性和控制,即使您确实找到了在iOS中本地执行此操作的方法.
话虽如此,我确实让它在iOS中工作,假设如下:
我在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)
但是,这可能不会给你你想要的东西.用户将收到每个呼叫请求的提醒,提供取消呼叫的机会.
| 归档时间: |
|
| 查看次数: |
3159 次 |
| 最近记录: |