android - 向拨号器发送暂停

标签 android android-intent uri tel

类似于 Sending Pause and DTMF input in android ,我正在尝试将暂停字符“,”发送到拨号器。这适用于 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”是否正确。

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

最佳答案

简答:看起来不可能使用 native 拨号器。

长答案:

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。这将绕过拨号程序,因此应谨慎使用。

关于android - 向拨号器发送暂停,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5750773/

相关文章:

android - 在 Android 中进行异步服务调用的方法?什么时候使用哪个?

Android 2.2 MediaPlayer 在一个 SHOUTcast URL 上工作正常,但在另一个 URL 上却不行

java - 从 Activity 外的类(class)发起 Intent

android - 两个 Activity 之间的共享元素转换问题

android - 未能将 Intent 结果传递回 Activity ,android 图像捕获 Intent

java - 如何在 MyClass.class.getResource() 中升级

java - libGDX + com.google.android.gms :play-services:7. 0.0:android:dexDebug

javascript - android中用户界面的webview

java - 如何自动更新Android应用程序而不在应用程序商店中分发?

java - 从 Socket.IO 获取和保存 JSON 数组