拨号程序未显示完整的美元代码,例如:* 123 * 1#

时间:2018-12-20 07:01:36

标签: dart flutter ussd

我正在使用url_launcher插件进行通话,但拨号程序未显示#字符:

String url = 'tel:*123#';
if (await canLaunch(url)) {
    await launch(url);
} else {
    throw 'Could not launch $url';
}

2 个答案:

答案 0 :(得分:3)

您需要使用URL encoding作为URL中的特殊字符。

所以#等于%23

这将有效launch('tel:\*123\%23');

其他方法是对用户键入的数字进行编码,然后将其传递给Uri.encodeFull(urlString)或Uri.encodeComponent(urlString)

喜欢这个。

launch("tel:" + Uri.encodeComponent('*123#'));

答案 1 :(得分:1)

免责声明:plugin作者在这里。

您是否要打开电话用户界面,还是希望安静地发出请求?如果您不想在不弹出电话UI的情况下进行操作,则Android在API级别26中引入了方法sendUssdRequest

我制作了一个名为ussd_service的Flutter插件,以便能够在Flutter应用程序中从dart轻松访问它。可以按以下方式使用它:

import 'package:ussd_service/ussd_service.dart';

makeMyRequest() async {
  int subscriptionId = 1; // sim card subscription Id
  String code = "*21#"; // ussd code payload
  try {
    String ussdSuccessMessage = await UssdService.makeRequest(subscriptionId, code);
    print("succes! message: $ussdSuccessMessage");
  } on PlatformException catch (e) {
    print("error! code: ${e.code} - message: ${e.message}");
  }
};

makeMyRequest();

希望这会有所帮助!如果您有任何问题,请告诉我Github repo的问题。