Отправка кода USSD с помощью алфавитных символов

Вопрос:В моем приложении Android я отправляю USSD коды (#144#73#), используя ниже Intent: String baseUssd = Uri.encode("#") + "144" + Uri.encode("#"); StringBuilder builder = new StringBuilder(); builder.append(baseUssd); builder.append("73"); builder.append(Uri.encode("#")); Intent intent = new Intent(Intent.ACTION_CALL, Uri.parse("tel:" + builder.toString())); Хорошо работает. Теперь я хочу отправить этот код: #144#73MA# Я запускаю это, используя панель набора номера, после работы Operator

Вопрос:

В моем приложении Android я отправляю USSD коды (#144#73#), используя ниже Intent:

String baseUssd = Uri.encode(«#») + «144» + Uri.encode(«#»); StringBuilder builder = new StringBuilder(); builder.append(baseUssd); builder.append(«73»); builder.append(Uri.encode(«#»)); Intent intent = new Intent(Intent.ACTION_CALL, Uri.parse(«tel:» + builder.toString()));

Хорошо работает.

Теперь я хочу отправить этот код:

#144#73MA#

Я запускаю это, используя панель набора номера, после работы Operator USSD.
Но если я попытаюсь сделать это программно, используя приведенный выше Intent, который не работает.

Я знаю, что буквенные символы не могут использоваться при наборе кода с помощью Dial Pad, но я, хотя это возможно, программно!

Любая идея, пожалуйста!

Edit

Когда я пытаюсь отправить это программно: #144#73MA# Я заметил, что приложение Dialer меняет алфавитные символы на соответствующую цифру на панели набора номера. Это означает, что dialer преобразует это: #144#73MA#

к этому #144#73 62 #: почему?

Потому что:

  • M соответствует цифре 6
  • A соответствует цифре 2

Лучший ответ:

Значит, что дозвонщик преобразует это: #144#73MA#

к этому #144#73 62 #: почему?

Я попытаюсь ответить только на часть почему.

Intent.ACTION_CALL обрабатывается классом OutgoingCallBroadcaster. Если вы посмотрите на метод processIntent(), этот фрагмент кода (строки 438-488 на момент написания):

String number = PhoneNumberUtils.getNumberFromIntent(intent, this); // Check the number, don’t convert for sip uri // TODO put uriNumber under PhoneNumberUtils if (number != null) { if (!PhoneNumberUtils.isUriNumber(number)) { number = PhoneNumberUtils.convertKeypadLettersToDigits(number); number = PhoneNumberUtils.stripSeparators(number); } } else { Log.w(TAG, «The number obtained from Intent is null.»); }

Там PhoneNumberUtils.convertKeypadLettersToDigits() преобразует буквы в эквивалентные числовые цифры:

public static String convertKeypadLettersToDigits (ввод строки)

Переводит любые буквенные буквы (например, [A-Za-z]) в указанном номере телефона в эквивалентные числовые цифры в соответствии с отображением букв клавиатуры телефона, описанных в ITU E.161 и ISO/IEC 9995-8.

Возвращает
входная строка, с буквенными буквами, преобразованными в числовые цифры с использованием сопоставления букв клавиатуры телефона. Например, ввод” 1-800-GOOG-411 “вернет” 1-800-4664-411″.

Надеюсь, что это поможет.

Оцените статью
Добавить комментарий