28

与在 android 中发送暂停和 DTMF 输入类似,我正在尝试将暂停字符“,”发送到拨号器。这适用于 HTC Sense 手机甚至 Xoom,但不适用于 Nexus One 或 T-Mobile G2 等“股票体验”手机(我怀疑摩托罗拉 Droid)。

这些电话似乎有一个拨号器,它试图漂亮地格式化数字(即添加破折号)并在击中逗号字符时停止。有趣的是,它不会阻塞“p”字符,尽管它会去掉“p”并继续添加数字。

这是 ActivityManager 看到的:

I/ActivityManager(   92): Starting activity: Intent { act=android.intent.action.DIAL dat=tel:8883333,444 cmp=com.android.contacts/.DialtactsActivity }

我还尝试了编码形式“tel:8883333%2C444”,这些手机的行为没有区别。如前所述,我已经尝试过“p”,但是这些字符被删除,导致拨号器错误地填充了 888-333-3444,而且我不确定“p”是否正确。

所以,问题是:有没有办法指定适用于大多数或所有安卓拨号器的暂停?

4

6 回答 6

17

简短的回答:看起来不可能使用本机拨号程序。

长答案:

Android 中的本机拨号器使用以下代码提取您使用 Intent 传递给拨号器的号码

if ("tel".equals(uri.getScheme())) {
  // Put the requested number into the input area
  String data = uri.getSchemeSpecificPart();
  setFormattedDigits(data, null);
  return true;
} 

在该setFormattedDigits方法中,数字因此被转换:

  String dialString = PhoneNumberUtils.extractNetworkPortion(data);

查看文档,extractNetworkPortion您会注意到它,“提取网络地址部分 [其中] 网络地址部分是DTMF 控制数字分隔符(暂停或等待)的所有内容。

因此,代码有意删除了暂停字符及其后面的任何内容。我能想到的唯一选择是替换拨号器或使用ACTION_CALL操作而不是ACTION_DIAL. 这将绕过拨号程序,因此应谨慎使用。

于 2012-02-01T01:06:33.090 回答
4

拨号暂停已使用逗号 30 年

如果安卓手机兼容ITUT V.250 ATS8=2,应设置逗号引起的延迟为2秒。(它可能以某种方式设置为 0)

ITUT 是一个伟大的标准组织,您可以免费下载他们的标准。

于 2011-07-30T11:45:50.647 回答
3

来自 android 的latin ime 源代码

<!-- Pause is a comma. Check PhoneNumberUtils.java to see if this has changed. -->
<Key 
    android:codes="44"
    android:keyLabel="Pause" />

我不是 100% 确定它是否是公开的,但您也许可以使用:

PhoneNumberUtils.PAUSE
于 2011-04-24T23:31:03.450 回答
0

这是可怕和危险的。在手机上接收电话会议电子邮件的商务人士必须不断地来回切换以获取号码。

让它像它应该的那样工作:

tel://+1-877-555-1212,,,2345678#

当在电话上的任何位置选择时,应拨打877号码暂停,然后拨入与会者会议代码和“输入”(#)。

就是这么简单。这在 Android 中不起作用的事实是 iPhone 的推销。

于 2014-10-03T15:35:34.833 回答
0

',' 是标准,但 HTC 在 rogers magic 中使用了 'p',你试过用 'p' 吗? HTC Magic 正在使用 p

于 2011-05-19T13:22:17.780 回答
0

为了将来参考,RFC-2806指定以以下格式存储电话号码:

tel:number;postd=post-dial

Wherenumber可以从+有意拨号开始,可以包括-.作为视觉分隔符,post-dial可以包括数字、大写字母 AD、, ,#用于暂停和等待。*pw

于 2015-12-22T06:40:26.293 回答