【问题标题】:Programmatically Dial a Phone number and pass DTMF using the iPhone SDK使用 iPhone SDK 以编程方式拨打电话号码并传递 DTMF
【发布时间】:2010-10-09 17:43:09
【问题描述】:

您如何通过 iPhone SDK 以编程方式执行以下操作:

  1. 通过 iPhone SDK 以编程方式拨打电话号码

  2. 绕过 iPhone 调出的拨号/取消提示

  3. 在拨打号码后发送额外的 DTMF,就像在普通电话中设置暂停一样。

我知道您可以拨打tel:// 电话,但问题是它会显示拨号/取消提示,然后会阻止发送任何未来的 DTMF。

【问题讨论】:

    标签: ios phone-call


    【解决方案1】:

    iPhone SDK 无法让您直接访问拨号号码(想象一下,如果您的手机上有一个“坏”程序,并且在静音状态下拨打了按分钟付费的号码,而您没有注意到)。

    但是,如果您使用 tel 链接,那么您应该可以发送“,”字符来插入暂停。

    所以要拨打 555-1212,然后等待 4 秒,然后在您将使用的按键音上按 12345# tel:5551212,,12345#

    退房 https://developer.apple.com/library/archive/featuredarticles/iPhoneURLScheme_Reference/PhoneLinks/PhoneLinks.html

    【讨论】:

    • tel:// 方法的问题是拨号/取消提示导致 iPhone 忽略任何超过号码的 dtmf。您是否有代码成功通过 dtmf 超过实际数字?
    • 报告似乎表明网页中的 tel: url 存在该问题,但实际应用程序不会:forums.macrumors.com/showthread.php?t=484177 您是在尝试创建 iPhone 应用程序还是 webapp?
    • 这是一个基于 SDK 的 iPhone 应用程序,但我最初的测试是围绕网页 tel:// 调用进行的。我将在 SDK 中尝试 DTMF
    • 谢谢。这对我很有用。
    • 当您说等待 4 秒时,这两个逗号是否对此负责?我测试的是,我必须拨打 121,然后按 2,然后按 4。为此,我只使用 121、2、4。先拨 121,接通后,自动轻按 2,然后自动轻按 4。我不明白你为什么说 4 秒,为什么是 4 个逗号
    【解决方案2】:

    我不知道为什么每个人都说你不能......你可以

    NSString *phoneNumber = @"15555551212";
    NSString *dtmfAfterPickup = @"1234";
    NSString *telString = [NSString stringWithFormat:@"tel:%@,%@", phoneNumber, dtmfAfterPickup];
    [[UIApplication sharedApplication] openURL:[NSURL URLWithString:telString]];
    

    这将绕过拨号/取消提示拨打 phoneNumber... 接听电话 1 秒后,dtmfAfterPickup 字符串会自动拨号。

    detect whether or not the device support phone calls 是个好主意

    【讨论】:

    • 您可以通过在 dtmfAfterPickup 字符串中插入逗号来添加额外的 1 秒暂停。 NSString *dtmfAfterPickup = @"1,2,3,4";这将在每个数字后添加 1 秒的暂停
    • 是否可以使用 API 录制电话交谈?
    • iOS SDK 中没有电话录音功能
    • AVAudioRecorder怎么样?我们不能用那个吗?
    • @Krish 您不能添加 * 或 #。 iOS 会阻止您这样做。
    【解决方案3】:

    根据上面 Adam 的 Apple 开发人员链接,有这个 RFC 链接详细解释了 iPhone 支持的电话链接方案的不同选项 -

    http://www.ietf.org/rfc/rfc2806.txt

    这至少允许您在 URL 中插入带有“p”的暂停,但是根据 RFC 指定了很多选项(但并非全部都是必需的)。还有什么作用?

    【讨论】:

      【解决方案4】:

      我尝试使用我的 iPhone 使用 CoronaSDK 和 openurl API。 它工作得很好! 只需:system.openURL("tel:[phonenumber],123")。 您可以使用附加逗号等待更多。 使用 Corona SDK / iOS7 测试。

      【讨论】:

        【解决方案5】:

        其实我只是试了下555-555-4822 EXT 8030

        即使在按下拨号后,它似乎也会发出一些音调(p 的数量代表延迟的秒数)。但是,远端没有像预期的那样响应音调,所以还是有问题。

        这确实有效,尽管它更容易出现计时问题,电话:555-555-4822, 8030。这只是在连接后暂停一秒钟(,将是两秒钟),然后播放 8030音调

        【讨论】:

          【解决方案6】:

          你不能这样做。 SDK 不允许您在此详细级别控制电话功能。

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 2011-03-11
            • 1970-01-01
            • 1970-01-01
            • 2014-09-12
            • 1970-01-01
            • 1970-01-01
            • 2012-04-25
            相关资源
            最近更新 更多