向拨号器发送暂停

pfo*_*han 28 android uri android-intent tel

在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 }
Run Code Online (Sandbox Code Playgroud)

我也尝试了编码形式,"tel:8883333%2C444",这些手机的行为没有区别.我已经尝试了"p",如上所述,但是这些字符被删除导致拨号器888-333-3444填充不正确,并且我不确定"p"是否正确.

所以,问题是:有没有办法指定一个适用于大多数或所有Android拨号程序的暂停?

Ret*_*ier 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;
} 
Run Code Online (Sandbox Code Playgroud)

setFormattedDigits方法中,数字如此变换:

  String dialString = PhoneNumberUtils.extractNetworkPortion(data);
Run Code Online (Sandbox Code Playgroud)

查看文档,extractNetworkPortion你会注意到它,"提取网络地址部分[其中]网络地址部分是DTMF控制数字分隔符(暂停或等待)的一切.

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