在安卓手机上使用特殊字符#发起电话呼叫

4
我使用以下代码在Android应用程序内启动电话呼叫:

我使用以下代码在Android应用程序内启动电话呼叫:

intent.setData(Uri.parse("tel:+12345 #123"));
startActivity(intent);

当它开始呼叫时,忽略以#开头的所有内容。

我读到了有关修改SpecialCharSequenceMgr.java文件的内容,但我找不到这个文件,而且说实话我也不知道具体要做什么。解决这个问题的最佳方法是什么?

5个回答

16

我认为问题在于#符号在URI中有特殊含义,所以你需要使用Uri.encode()方法对其进行编码,像这样:

    Intent out = new Intent();
    out.setAction(Intent.ACTION_DIAL);
    out.setData(Uri.parse("tel:" + Uri.encode("+12345#123")));
    startActivity(out);

感谢您的快速回复。这会导致电话屏幕打开并显示正确的号码(包括特殊字符),但不再自动开始呼叫。必须手动按下绿色电话按钮。有没有办法在不手动按下按钮的情况下启动呼叫?非常感谢... - user387184
1
当然,你只需要使用ACTION_CALL操作而不是ACTION_DIAL,并且在清单文件中使用android.permission.CALL_PHONE权限即可。 - Jon Colverson

4

我认为Jon对你的问题并不完全正确,虽然这个想法并不是那么糟糕...... 您需要使用特殊字符映射来启动英镑符号:

Intent intcall = new Intent(Intent.ACTION_CALL);
intcall.setData(Uri.parse("tel:5555" + "%23"+"additional number"));
startActivity(intcall);

0
我发现这个对我很有效,适用于Unity 2020.3:

'Application.OpenURL( "tel://Number" );'


1
目前你的回答不够清晰,请编辑并添加更多细节以帮助其他人理解它如何回答所提出的问题。你可以在帮助中心找到有关如何撰写好答案的更多信息。 - Community

0

只需要这样做,对我很有效。

Uri.parse(Uri.encode("your string value"));

0

Intent out = new Intent();

out.setAction(Intent.ACTION_DIAL);

out.setData(Uri.parse("tel:" + Uri.encode("+12345#123")));

startActivity(out);


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接