通过上行呼叫中发送DTMF音调

| 我正在做一个项目,要求我的应用程序在通话过程中能够在语音的上行链路频率上发送DTMF音调。 我的两个条件是: 我们不使用定制的Android平台 我们不需要扎根手机 我已经花了几天时间来做作业,并且知道当前的SDK /标准API不支持通话中DTMF发送。但是,通过使用
com.android.internal.telephony
中的相关类,我希望模仿本地Phone应用程序如何做到这一点。我关注了这个网站,了解如何将内部API用于标准的第三方应用程序。 我还设置了Android OS开发环境,并能够在模拟器上以调试模式运行Phone应用程序,以了解其内部工作原理。 我在股票标准仿真器上尝试了多种方法,但遇到的错误是: 尝试使用android.uid.phone的sharedUserId根据Phone.apk的源安装重命名的应用程序后,我得到:   安装错误:INSTALL_FAILED_SHARED_USER_INCOMPATIBLE 毫无疑问,由于我没有用于签名的系统证书。 尝试根据相关的DTMF音调(从Phone.apk的源发送代码)编写自定义应用程序后,在设置PhoneFactory时出现以下错误;   java.lang.SecurityException:权限拒绝:不允许发送广播android.provider.Telephony.SPN_STRINGS_UPDATED。 毫无疑问,由于我的应用程序没有正确的权限,尽管AndroidManifest.xml的设置与Phone.apk的权限相同。 我茫然不知所措。有没有人有什么建议? 提前致谢, 西蒙     
已邀请:
        您采取了一种有趣的方法,我赞扬您的努力。不幸的是,不允许您作为应用程序开发人员使用一些保留的内部特权(例如as1ѭ),这或多或少破坏了这种方法。您可以尝试删除导致此问题的代码区域,但是我很确定您会遇到阻塞问题。 因此,目前恐怕这是不可能的。 Android上有一个开放功能请求,要求通过现有电话发送DTMF音调,但该功能已经休眠了将近两年。 我了解这不能解决您的问题,但是请注意,您可以在拨打电话后直接发送DTMF音调:
Intent i = new Intent(\"android.intent.action.CALL\",
                      Uri.parse(\"tel://\" + number + \",\" + dtmfTones));
    
        简而言之,您至少要自定义“电话”应用,否则您将无法做到这一点,该应用必须以系统用户身份运行才能访问调制解调器。为此,您必须扎根手机。 为了满足您的要求,唯一可能的解决方案是增强android平台。我们就是这样做的,并且已经将补丁发送到AOSP项目: https://android-review.googlesource.com/32820 https://android-review.googlesource.com/32821 我们目前正在等待Google开发人员审核并接受我们的贡献。如果您有兴趣,请在各种AOSP列表(android-contrib,android-platform)上告知Google。希望它将加速审查。 最好的祝福, 热心地     
        您不能在通话过程中发送DTMF音,但是可以在启动通话时对其进行“编程”时发送。 请参阅以下帖子:https://stackoverflow.com/a/12986066/475472     

要回复问题请先登录注册