Звонилка не показывает полный код ussd, например: *123*1#
Я использую url_launcher
Плагин для вызова, но номеронабиратель не показывает #
персонаж:
String url = 'tel:*123#';
if (await canLaunch(url)) {
await launch(url);
} else {
throw 'Could not launch $url';
}
3 ответа
Вам необходимо использовать кодировку URL для специального символа в URL.
Так #
равняется %23
Это будет работать launch('tel:\*123\%23');
Другой способ - кодировать число, набранное пользователем, и передавать его через Uri.encodeFull(urlString
) или же Uri.encodeComponent(urlString)
Как это.
launch("tel:" + Uri.encodeComponent('*123#'));
Отказ от ответственности: автор плагина здесь.
Вы хотите, чтобы пользовательский интерфейс телефонного звонка открывался, или вы предпочитаете делать запрос без звука? Если вы предпочитаете делать это, не открывая пользовательский интерфейс телефонного звонка, Android представил на уровне API 26 метод sendUssdRequest.
Я создал плагин Flutter под названием ussd_service, чтобы иметь возможность легко получить к нему доступ из dart в приложении Flutter. Его можно использовать следующим образом:
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);
}
},