Отправка кода 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#

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

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

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

редактировать

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

к этому #144#7362#: Зачем?

Так как:

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

1 ответ

Решение

Это означает, что номеронабиратель преобразует это: #144#73MA#

к этому #144#7362#: Зачем?

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

Intent.ACTION_CALL обрабатывается OutgoingCallBroadcaster учебный класс. Если вы посмотрите на processIntent() Метод, есть этот кусок кода (строки 438~448 на момент написания):

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 (String input)

Преобразует любые буквенные буквы (например, [A-Za-z]) в указанном номере телефона в эквивалентные цифровые цифры в соответствии с отображением букв клавиатуры телефона, описанным в МСЭ E.161 и ИСО / МЭК 9995-8.

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

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

Другие вопросы по тегам