Вопрос:
В моем приложении 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″.
Надеюсь, что это поможет.