You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

部分未测试机型拨号器号码格式化异常:+号被替换为3663

解决拨号器将+号替换为3663的问题

嘿,这个问题我之前帮同事排查过,大概率是电话号码里的空格触发了部分拨号器的T9键盘映射逻辑导致的!

问题原因分析

你传入的号码是"+55 11 4436-7602",里面包含了空格和短横线这类视觉分隔符,但tel: URI的标准规范里,只允许数字、+*#这些功能性字符。部分小众拨号器在解析带空格的tel: URI时,会错误地把+号识别成需要通过T9键盘手动输入的字符,而+在T9键盘上对应的按键序列刚好就是3663(不同键盘逻辑可能有差异,但这就是你看到的替换结果)。

解决方案:清理号码格式

只需要把号码里的非功能性分隔符(空格、短横线)全部移除,只保留+和纯数字,再传给tel: URI就可以了:

// 第一步:清理号码,去掉所有非+、非数字的字符
String cleanedNumber = "+55 11 4436-7602".replaceAll("[^+0-9]", "");
// 第二步:构造正确的拨号Intent
Intent intent = new Intent(Intent.ACTION_DIAL);
intent.setData(Uri.parse("tel:" + cleanedNumber));

额外说明

如果需要在界面上给用户显示格式化的号码(比如带空格、短横线的易读格式),完全没问题,但传给拨号器的tel: URI必须是清理后的纯数字格式——这是符合Android官方规范的做法,也能避免各种小众拨号器的兼容问题。

内容的提问来源于stack exchange,提问作者raphaelbgr

火山引擎 最新活动