拨号器未显示完整的 ussd 代码,例如:*123*1#



我正在使用url_launcher插件进行呼叫,但拨号器没有显示#字符:

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

中的特殊字符使用 URL 编码。

所以#等于%23

这将launch('tel:*123%23');工作

另一种方法是对用户键入的数字进行编码并通过Uri.encodeFull(urlString)或Uri.encodeComponent(urlString)

喜欢这个。

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

免责声明:插件作者在这里。

是希望打开电话呼叫用户界面,还是希望以静默方式发出请求?如果你更喜欢在不弹出电话用户界面的情况下做到这一点,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 存储库的问题。

请参阅拨号器将显示完整的USSD代码

   var code = Uri.encodeComponent(service.codeEnable);
                    final url = 'tel:$code';
                    if (await canLaunchUrlString(url)) {
                      await launchUrlString(url);
                    }
                  },

相关内容

最新更新