android如何处理电话号码中的+-sign
Posted
技术标签:
【中文标题】android如何处理电话号码中的+-sign【英文标题】:How does android handle the +-sign in a phonenumber 【发布时间】:2013-03-20 20:29:59 【问题描述】:我正在尝试通过代码调用电话卡,并希望将以下 uri 发送到意图:
访问号码+暂停+电话号码+#
电话号码来自地址列表,但我如何处理 +(如退出代码),因为它例如在美国 011 和欧洲 00。而且我想我不能只将它发送到意图.有办法处理吗?
问题是电话卡希望加号为 00 或 011。
String uri = "tel:" + Uri.encode(phonenumber)
try
Intent intentCall = new Intent(Intent.ACTION_CALL);
intentCall.setData(Uri.parse(uri));
startActivity(intentCall);
catch (ActivityNotFoundException e)
【问题讨论】:
为什么不能直接发送到intent?你试过了吗? “只是尝试”在我看来是许多错误应用程序的来源,这些应用程序依赖于非官方支持的行为,这些行为不能保证在不同版本中持续存在。检查文档几乎总是更好。 此外,看看它在这种情况下是否有效将涉及在多个国家/地区进行测试,这将非常昂贵...... 朱尔斯,我试过了。问题是我想让多张卡成为可能(因此确实存在昂贵的测试因素)并且 + 不起作用,它要求退出代码,例如 00 或 011。我认为 android 几乎必须'将 + 翻译成默认语言环境的退出代码,所以应该有一个返回退出代码的方法。 【参考方案1】:Android is documented 使用 rfc3966 兼容的电话 uri。 RFC3966 规定“+”字符用于国际拨号,因此 Android 应识别“+”字符并进行适当处理。
【讨论】:
问题是我是在电话卡访问号码之后发送的,所以我必须将其调整为退出代码。我希望也许 android 会自动将 + 调整为该语言环境的退出代码,有没有办法? 嗯...我明白了问题所在。 '+' 字符仅在数字开头有效,因此不能保证有效(即使在某些版本中有效,但在其他版本中可能无效)。你是如何获得你的电话卡号码的?您能否以相同的方式获得退出代码(可以想象,一些电话卡提供商可能会使用与用户本地不同的退出代码,例如,考虑欧洲的用户通过其服务设置为美国标准的卡提供商呼叫,所以询问卡提供商该怎么做可能是最好的事情)? 是的,我想是的。如果 sim 例如有退出代码会很好。从现在开始,如果它是另一张卡,它是不兼容的。 不幸的是,电话实际上并不需要知道这些信息(呼叫是通过发送informit.com/library/… 中描述的格式的数据包来建立的,正如您所见,它有一个“地址类型”字段指定拨打的号码是国内号码还是国际号码),因此 Android 不太可能知道代码。以上是关于android如何处理电话号码中的+-sign的主要内容,如果未能解决你的问题,请参考以下文章
如何处理 gapps-jb-20130813-signed.zip