我正在使用url_launcher
插件进行通话,但拨号程序未显示#
字符:
String url = 'tel:*123#';
if (await canLaunch(url)) {
await launch(url);
} else {
throw 'Could not launch $url';
}
答案 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的问题。