You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

URI含#号字符串解析问题:拨号界面丢失#号的解决求助

解决拨号URI中#号丢失的问题

嘿,我太懂这个坑了!你遇到的问题根源在于#是URI里的特殊字符(它用来标识片段标识符),直接把带#的字符串拼进tel: URI里时,系统的URI解析器会自动截断#及其后面的内容,导致拨号界面显示不全。

快速修复方案

你只需要对拨号字符串做URL编码处理,让#转换成它的编码值%23,系统拨号应用拿到编码后的URI会自动还原成#。最稳妥的方式是用Android自带的Uri.encode()方法来处理整个字符串,它能自动处理所有URI特殊字符,不止是#。

修改后的完整代码

@Override 
public void onBindViewHolder(@NonNull RecyclerAdapterDataView holder, int i) { 
    final String code = list.get(i).getActivation(); 
    holder.activation.setText("Activation Code: "+code); 
    holder.activate.setOnClickListener(new View.OnClickListener() { 
        @Override 
        public void onClick(View v) {
            // 不管有没有#,直接编码都没问题,不用额外判断也可以
            String encodedDialCode = Uri.encode(code);
            Intent dialIntent = new Intent(Intent.ACTION_DIAL);
            dialIntent.setData(Uri.parse("tel:" + encodedDialCode));
            context.startActivity(dialIntent);
        } 
    }); 
}

补充说明

  • 我把原来的if (code.contains("#"))判断去掉了,因为Uri.encode()对没有特殊字符的字符串也能正常处理,这样代码更简洁通用
  • 如果以后你的激活码里出现其他特殊字符(比如&、?之类的),这个方法也能完美兼容,不用再逐个处理
  • 手动替换#为%23也能解决当前问题,但通用性差一些,不如Uri.encode()靠谱

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.14 08:30:27