2011-04-21 69 views
26

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 } 

我也试着编码形式,“联系电话:8883333%2C444”对这些手机的行为没有什么区别。我已经尝试过“p”,如上所述,但是这些字符被丢弃导致拨号程序有888-333-3444错误地填充,我不确定“p”是否正确无论如何。

所以,问题:有没有一种方法来指定一个适用于大多数或所有android拨号器的暂停?

回答

17

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

龙答:

在Android的原生拨号器使用下面的代码使用意向

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

+0

感谢您关注此事。 – pforhan 2012-02-01 14:27:06

3

从Android的latin ime source code

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

我不是100%肯定,如果它是公共的,但你也许可以使用:

PhoneNumberUtils.PAUSE 
+0

是的,这就是我确定我应该发送一个逗号。但问题在于,一些拨号器在遇到逗号时会停止冷却。 – pforhan 2011-04-26 15:13:51

0

'' 是所使用的标准,但HTC 'p'in rogers magic,你试过'p'吗? HTC Magic is using p

+0

是的,我尝试了p字符,就像我在我的问题中所描述的那样。它被简单地放下,并且所有的数字被串在一起。 – pforhan 2011-05-20 12:49:33

3

拨号暂停已逗号30年

如果Android手机与ITU-T V.250兼容ATS8 = 2应设置了由逗号2秒的延迟。 (它有可能被设置为0)

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

+0

感谢您的信息。我真的认为这是拨号人自己正在从意图中的字符串中删除逗号。如果我没有记错,这些拨号程序可让您插入暂停,只要您从其用户界面执行此操作即可。 – pforhan 2011-08-01 14:26:35

+0

Android手机可能很好地使用该标准内部*,但允许其他应用程序发送请求以拨打号码的界面使用RFC3966 URI来指示该号码,该号码不支持暂停字符作为有意的选择(请参阅http:// tools.ietf.org/html/rfc3966#section-12) – Jules 2013-03-21 11:25:27

0

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

只是要像它应该它的工作:

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

应拨则877号暂停在参加会议的代码拨号和“进入”(#)在手机上的任何地方选择的时候。

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

+1

你可能想要提交一个Android的错误,我不确定他们在这里阅读。 – pforhan 2014-10-06 15:13:36

0

供将来参考RFC-2806指定存储在所述格式的电话号码:

tel:number;postd=post-dial 

number可以与+开始有意拨号并且可以包括-.作为视觉分离器和post-dial可包括数字,上壳体字母AD,#,*,p暂停和w等待。

+0

不幸的是,当在tel:URI中给出“postd =”时,iOS(从版本9开始)失败,所以现在只保留使用,并且;在iOS上 – 2016-05-27 11:29:22