【问题标题】:Sending DTMF tones over the uplink in-call在上行链路通话中发送 DTMF 音
【发布时间】:2011-09-14 14:16:51
【问题描述】:

我正在开展一个项目,该项目要求我的应用能够在通话期间在语音的上行链路频率上发送 DTMF 音。

我的两个条件是:

  • 我们不使用定制的 Android 平台
  • 我们不需要root手机

我花了几天时间做功课,并且知道当前的 SDK/标准 API 不支持通话中的 DTMF 发送。但是,通过使用com.android.internal.telephony 中的相关类,我希望模仿原生电话应用程序是如何做到这一点的。我关注了this site on how to use internal APIs for standard 3rd party apps

我还为自己设置了 Android OS 开发环境,并且能够在模拟器上以调试模式运行 Phone 应用程序以了解其内部工作原理。

我在股票标准模拟器上尝试了各种方法,但我得到的错误是:

  1. 在尝试使用 android.uid.phone 的 sharedUserId 安装基于 Phone.apk 源的重命名应用后,我得到:

    安装错误:INSTALL_FAILED_SHARED_USER_INCOMPATIBLE

    毫无疑问,因为我没有系统证书来签署它。

  2. 在尝试根据 Phone.apk 源中的相关 DTMF 音发送代码编写自定义应用程序后,我在设置 PhoneFactory 时收到以下错误;

    java.lang.SecurityException: Permission Denial: 不允许发送广播 android.provider.Telephony.SPN_STRINGS_UPDATED。

    毫无疑问,因为我的应用程序没有正确的权限,尽管 AndroidManifest.xml 设置为具有与 Phone.apk 相同的权限。

我不知道还能尝试什么。有人有什么建议吗?

提前致谢, 西蒙。

【问题讨论】:

    标签: android telephony internal dtmf in-call


    【解决方案1】:

    您采取了一种有趣的方法,我赞扬您的努力。不幸的是,有一些保留的内部权限(显然,例如SPN_STRINGS_UPDATED)不允许您作为应用程序开发人员使用,这或多或少破坏了这种方法。您可以尝试删除导致此问题的代码区域,但我相当肯定您会遇到阻塞问题。

    因此,恐怕目前这是不可能的。有 an open feature request on Android 用于通过现有电话发送 DTMF 音调,但它已经休眠了将近两年。

    我知道这并不能解决您的问题,但请注意,您可以在拨打号码后直接发送 DTMF 音:

    Intent i = new Intent("android.intent.action.CALL",
                          Uri.parse("tel://" + number + "," + dtmfTones));
    

    【讨论】:

    • 我试过这个,但我没有听到任何我希望在接收端听到的 DTMF 音。我是否需要一些特殊的东西来检测使用此方法使用的 DTMF?
    • 如果该应用程序也安装为系统应用程序...怎么办? (就像我正在制作的助手一样)我也准备好使用隐藏/内部方法和类(github.com/anggrayudi/android-hidden-api)。并且该设备已植根,如果这有任何帮助的话。您是否想到了这些限制,可以让我免于直接分析源代码并尝试理解它(我根本不是 Android 专家)?就像你可能知道的一些提示或其他东西。 (如果你会看到这个,因为答案不是 9 岁已经哈哈哈。)
    【解决方案2】:

    简单地说,如果不至少自定义电话应用程序,您将无法做到这一点,该应用程序必须以系统用户身份运行才能访问调制解调器。为此,您必须对手机进行 root。

    为满足您的要求,唯一可能的解决方案是增强 android 平台。我们就是这样做的,并且已经将补丁发送到 AOSP 项目:

    https://android-review.googlesource.com/32820

    https://android-review.googlesource.com/32821

    我们目前正在等待 Google 开发者审核并接受我们的贡献。如果您有兴趣,请让 Google 知道各种 AOSP 列表(android-contrib、android-platform)。它有望加快审查。

    最好的问候, 格格利

    【讨论】:

    • 你好,这个功能的状态有变化吗?我能帮忙吗?我试图了解在 ASOP 网站中的投票位置.. 但我放弃了。我什至无法理解该功能是被接受还是被卡住了?它的状态如何?
    • 最新的补丁集被拒绝,因为它没有在 AOSP 主服务器上合并。如果其他人可以接手,重新集成并提交一个新的补丁集,那就太好了。
    【解决方案3】:

    您无法在通话过程中发送 DTMF 音,但您可以在发起呼叫时“编程”它们时发送。 请参阅以下帖子:https://stackoverflow.com/a/12986066/475472

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多