显示通话拨号盘 - 通话期间拨打号码 - DTMF

Posted

技术标签:

【中文标题】显示通话拨号盘 - 通话期间拨打号码 - DTMF【英文标题】:Show in-call dialpad - Dial a number during call - DTMF 【发布时间】:2012-04-25 07:21:10 【问题描述】:

我想在接听电话后拨打一个号码,通常由通话拨号盘完成。

我尝试了以下方法,但它开始拨打新电话(ACTION_VIEW 也是如此)。

Intent dial = new Intent(Intent.ACTION_DIAL);
dial.setData(Uri.parse("tel:9"));
startActivity(dial);

我的猜测是“tel:”会触发一个新的拨号序列。我可能需要的是显示通话拨号盘并模拟击键。

有人吗?

编辑: 我发现了这个问题 Starting the InCallScreen activity 这让我觉得我只需要向“com.android.phone.InCallScreen”发送一个 keydown 事件,但我不知道该怎么做。 这也是一个直接相关的问题,已经(并且仍然)开放多年: http://code.google.com/p/android/issues/detail?id=1428

【问题讨论】:

据我所知,公共 API 中没有用于此的功能。 TelephonyManager 有一些 proposed changes 允许这样做,但它们似乎已经停滞不前。 【参考方案1】:

不。触发新呼叫的不是 tel:,而是您正在创建一个新 Intent,然后运行 ​​startActivity(dial);

想想这意味着什么:您正在启动一个全新的活动,因此它无法与您之前的代码正在使用的手机相关活动进行交互。

我认为您真正想做的是在您拨打的电话的末尾添加一个号码。为此,您需要在 URI 数据中输入整个数字以及一个暂停字符 (p),并使用 ACTION_CALL。代码:

Intent dial = new Intent(Intent.ACTION_CALL);
dial.setData(Uri.parse("tel:7195555555ppp9"));
startActivity(dial);

我做了三个暂停,你应该根据需要多长时间进行调整。或者,使用等待字符 (w),但这似乎需要用户确认才能发送额外的数字。

【讨论】:

以上是关于显示通话拨号盘 - 通话期间拨打号码 - DTMF的主要内容,如果未能解决你的问题,请参考以下文章

android通话没有显示拨号UI?

安卓手机无法拨号打电话

自动拨号,iphone

如何在 android 实时通话期间以编程方式发送 Dtmf 音?

android中拨打电话的几种实现

传真机传真外地拨号后提示号码不正确问题