Intereting Posts
«Начать развертывание до бета-тестирования» отключено в консоли разработчика Play Маркета Android: Как скачать файл в Android? Как я могу преобразовать Bitmap в Uri? Как решить: «ошибка: не удается найти класс символов …» после преобразования класса Java в Kotlin? SwitchCompat рисует дополнительные строки Журналы отладки Android действительно удалены во время выполнения? FirebaseJobDispatcher запускается при изменении сети Требуется Gradle версии 1.8. Текущая версия – 1.9-rc-3 – Android Studio Android.database.sqlite.SQLiteCantOpenDatabaseException: неизвестная ошибка (код 14): не удалось открыть базу данных Фрагменты Android воссозданы при изменении ориентации Невидимые значки элементов ActionMode в Theme.Sherlock.Light.DarkActionBar Как заставить RecyclerView прокручивать, когда предметов недостаточно, чтобы заполнить высоту sceen Как исправить ошибку Android BLE SCAN_FAILED_APPLICATION_REGISTRATION_FAILED? Существует ли эквивалент Wi-Fi Direct / Wi-Fi P2P для Phonegap / Cordova? Сортировка массива имен файлов, содержащих строки с номерами

Как получить ответ от USSD-кода от Android?

Я написал приложение, которое использует ussd-код. Я хочу отправить запрос на ussd, но я не знаю, как получить данные и сохранить их в String.

образец кода:

@Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); Button btn = (Button) findViewById(R.id.button1); btn.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { // TODO Auto-generated method stub String encodedHash = Uri.encode("#"); String ussd = "*141*1" + encodedHash; startActivityForResult(new Intent("android.intent.action.CALL", Uri.parse("tel:" + ussd)), 1); } }); } @Override protected void onActivityResult(int requestCode, int resultCode, Intent data) { // TODO Auto-generated method stub super.onActivityResult(requestCode, resultCode, data); Toast.makeText(getApplicationContext(), "USSD: " + requestCode + " " + resultCode + " ", 1).show(); if (requestCode == 1) { if (resultCode == RESULT_OK) { // String result=data.getStringExtra("result"); String dd = data.toString(); Toast.makeText(getApplicationContext(), dd, 1).show(); } } 

Приложение для скриншотов: Введите описание изображения здесь

Введите описание изображения здесь

Как решить мою проблему?

Solutions Collecting From Web of "Как получить ответ от USSD-кода от Android?"

Набор кода USSD из пользовательского действия выполняется прямо с использованием намерения DIAL или CALL, но прослушивание возвращенного результата не связано с тем, что Android не имеет надлежащей поддержки для перехвата вызовов USSD внутри платформы, но частичная, хотя и недокументированная поддержка существует внутри родного Дозвонщик.

Для начала рассмотрим класс PhoneUtils в исходном коде Android. Ссылка для 4.0.3, но я считаю, что эта частичная поддержка присутствует с 2.3.

В частности, глядя на строку 217, создается намерение с именем «com.android.ussd.IExtendedNetworkService». Так что вам нужно сделать, это реализовать свой собственный сервис, который отвечает на это намерение. Служба должна быть реализована в соответствии с IExtendedNetworkService.aidl, которая является частью платформы Android.

Helpl предоставляет несколько функций, но тот, о котором мы заботимся, это функция getUserMessage (text) в этой службе. Текст является окончательным значением, возвращаемым вызовом USSD.

Заметки:

  • Поскольку служба привязана к PhoneUtils, вам необходимо запустить службу при загрузке телефона. Это также означает, что для любой модификации услуги потребуется перезагрузка телефона.
  • Возврат null из getUserMessage подавит дозвонщик из показа USSD-результата, но нет возможности полностью скрыть дозвонщик.
  • Вы также можете использовать другие функции для изменения текста, отображаемого во время разговора.
  • Кажется, что это не работает в USSD-подсказках (меню) только по окончательным результатам.

Ознакомьтесь с примером кода на github здесь .