Android USSD 以编程方式不工作

Android USSD programmatically not working

我正在尝试使用以下方法以编程方式发送 USSD

String smallTalkCode = "*" + "808" + "*" + "13" + Uri.encode("#"); startActivity(new Intent("android.intent.action.CALL", Uri.parse("tel:" + smallTalkCode)));

但它不起作用。我可以从日志调试中看到 # 被替换为 %23。为什么 Uri.encode("#") 不起作用?

`12-29 23:06:27.092 16357-16357/com.example.tsf.myfirstapp D/TAG: *808*13%23

您不需要对“#”进行 Uri 编码。直接用“#”即可。

String smallTalkCode  = "*" + "808" + "*" + "13" + "#";

我发现我的代码是正确的,错误来自操作员方面。我试图从 phone 拨号发送 *808*13# 并得到相同的错误响应。并尝试发送另一个 USSD 短代码,使用以下代码可以正常工作。一开始我对 Uri.encode("#") 的 %23 输出感到困惑。但看起来 # 应该被翻译成 %23 才能工作并且 # 不应该被直接使用。我试过

String ussdCode = "*" + "804" + Uri.encode("#"); startActivity(new Intent("android.intent.action.CALL", Uri.parse("tel:" + ussdCode))); Log.d(mTtitle,smallTalkCode);

并得到了我预期的回应。加上我看到的日志 804%23

感谢支持