Sim*_*ale 21 android telephony internal dtmf in-call
我正在开展一个项目,要求我的应用程序能够在活动呼叫期间在语音的上行链路频率上发送DTMF音调.
我的两个条件是:
我花了几天时间做作业,并且我知道当前的SDK /标准API不支持通话中的DTMF发送.但是,通过使用相关的类com.android.internal.telephony我希望模仿本机Phone应用程序如何做到这一点.我在网站上关注如何使用标准第三方应用程序的内部API.
我还设置了Android OS开发环境,并且能够在模拟器上以调试模式运行Phone应用程序以确定其内部工作方式.
我在股票标准模拟器上尝试了各种方法,但我得到的错误是:
尝试使用android.uid.phone的sharedUserId基于Phone.apk的源安装重命名的应用程序后,我得到:
安装错误:INSTALL_FAILED_SHARED_USER_INCOMPATIBLE
毫无疑问,由于我没有系统证书来签署它.
在尝试根据Phone.apk来源的相关DTMF音调发送代码编写自定义应用程序后,在设置PhoneFactory时出现以下错误;
java.lang.SecurityException:Permission Denial:不允许发送广播android.provider.Telephony.SPN_STRINGS_UPDATED.
毫无疑问,由于Android应用程序没有正确的权限,尽管AndroidManifest.xml设置的权限与Phone.apk相同.
我不知道还能尝试什么.有没有人有什么建议?
先谢谢,西蒙.
Pau*_*sma 10
你采取了一种有趣的方法,我赞扬你的努力.不幸的是,有一些保留的内部特权(显然,例如SPN_STRINGS_UPDATED)不允许您作为应用程序开发人员使用,这或多或少会破坏这种方法.您可以尝试删除导致此问题的代码区域,但我相当肯定您会遇到阻塞问题.
因此,我担心目前这是不可能的.在Android上有一个开放的功能请求,用于通过现有的电话呼叫发送DTMF音,但它已经在那里休眠了将近两年.
我知道这不能解决您的问题,但请注意您可以在拨打号码后直接发送DTMF音:
Intent i = new Intent("android.intent.action.CALL",
Uri.parse("tel://" + number + "," + dtmfTones));
Run Code Online (Sandbox Code Playgroud)
小智 6
简单地说,如果没有自定义至少电话应用程序,您将无法执行此操作,该应用程序必须以系统用户身份运行才能访问调制解调器.要做到这一点,你必须root你的手机.
为了满足您的要求,唯一可行的解决方案是增强Android平台.我们做到了这一点,并已将我们的补丁发送到AOSP项目:
https://android-review.googlesource.com/32820
https://android-review.googlesource.com/32821
我们目前正在等待Google开发者审核并接受我们的贡献.如果您有兴趣,请让Google知道各种AOSP列表(android-contrib,android-platform).它有望加快审查.
最诚挚的问候,Gergely
| 归档时间: |
|
| 查看次数: |
25014 次 |
| 最近记录: |