Intereting Posts
Проблемы с быстрой прокруткой в ​​Android 4.4 Приложение Android Studio работает слишком медленно Принудительное направление текста для LeadingMarginSpan2 Атрибут пользовательского макета Android «ссылочный атрибут»? Невозможно разрешить поддержку символа (используя Android Studio, следуя руководству по началу работы) Не удалось выполнить преобразование dex & Conversion в формат Dalvik Android UserManager: проверьте, является ли пользователь владельцем (admin) Дооснащение Ожидаемое BEGIN_OBJECT, но BEGIN_ARRAY Изменение цвета фона элемента в Android ListActivity onListItemClick Андроид-студия не может найти символ «Активность» NPE при раздувании макета (попытка вызвать виртуальный метод «boolean java.lang.String.equals (java.lang.Object)» в ссылке на нулевой объект) Android Phonegap: уведомлять javascript о завершении работы AsyncTask Android: подождите от входа пользователя из диалогового окна? Услуги Android: соображения жизненного цикла Объекты Android OpenGL ES Framebuffer – отображение глубины-буфера текстуры

Как получить ответ от 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 здесь .