Yonathan1111 Ответов: 1

Перехват ussd-сообщения android-приложение


Всем привет,

Здравствуйте, ребята, недавно меня назначили работать над новым Android-проектом, он сложный, и он мне понравился, вот проблема, с которой я столкнулся.

Мне нужно перехватить ussd-сообщение, я пытался исследовать его, но не нашел, что действительно может помочь.

Пожалуйста, укажите мне все, с чего я могу начать.

Большое спасибо

Что я уже пробовал:

охраняемых недействительными вызова(строка номер_телефона) {
пробовать {
startActivityForResult(
новое намерение("андроид.намерениях.действий.Вызов", Uri. parse(phoneNumber)), 1);
} catch (исключение eExcept) {
Строка msg = eExcept. toString();

это.смотреть.функции append("\п\п " + "\п" + МСГ);
}
}





public class MyService расширяет AccessibilityService {
публичный статический строковый тег = служба MyService.класс.getSimpleName();

@Ручная коррекция
public void onAccessibilityEvent (событие AccessibilityEvent) {
Log. d (тег, " onAccessibilityEvent");

AccessibilityNodeInfo source = event. getSource();
/ * if (event. getEventType () = = AccessibilityEvent.TYPE_WINDOW_STATE_CHANGED &&усилителя; !событие.то getclassname().равно("андроид.приложение.AlertDialog")) { // андроид.приложение.AlertDialog является стандартной, но не для всех телефонов */
if (event. getEventType () = = AccessibilityEvent.TYPE_WINDOW_STATE_CHANGED& & amp; !String.valueOf(event. getClassName ()). contains("AlertDialog")) {
вернуть;
}
if (event. getEventType () = = AccessibilityEvent.TYPE_WINDOW_CONTENT_CHANGED и усилитель; & (источник == нуль || !source. getClassName (). equals ("android. widget.TextView"))) {
вернуть;
}
if (event. getEventType () = = AccessibilityEvent.TYPE_WINDOW_CONTENT_CHANGED &амп;&амп; TextUtils.пустой(источник.с текстом())) {
вернуть;
}

Список & lt;charsequence> eventText;

if (event. getEventType () = = AccessibilityEvent.TYPE_WINDOW_STATE_CHANGED) {
eventText = событие.с текстом();
} еще {
eventText = Collections. singletonList(source. getText());
}

String text = processUSSDText(eventText);

if(TextUtils.isEmpty (text) ) return;

// Закрыть диалог
performGlobalAction(GLOBAL_ACTION_BACK); / / это работает только на 4.1+

Log. d(тег, текст);
// Обработайте USSD-ответ здесь

}

частная строка processUSSDText(List & lt;charsequence> eventText) {
for (CharSequence s : eventText) {
String text = String. valueOf(s);
// Return text, если текст является ожидаемым ussd-ответом
если (true ) {
возвращаемый текст;
}
}
возвращать null;
}

@Ручная коррекция
общественного недействительными onInterrupt() {
}

@Ручная коррекция
охраняемых недействительными onServiceConnected() {
супер.onServiceConnected();
Log. d (тег, "onServiceConnected");
AccessibilityServiceInfo info = новый AccessibilityServiceInfo();
info. flags = AccessibilityServiceInfo.ПО УМОЛЧАНИЮ;
информация.имена-пакетов = новая строка[]{"ком.андроид.телефон"};
info. eventTypes = AccessibilityEvent.TYPE_WINDOW_STATE_CHANGED | AccessibilityEvent.TYPE_WINDOW_CONTENT_CHANGED;
информация.feedbackType = AccessibilityServiceInfo.FEEDBACK_GENERIC;
setServiceInfo (информация);
}
}

Richard MacCutchan

- Пожалуйста, укажите мне все, с чего я могу начать."

Вы могли бы рассказать нам, в чем проблема.

Yonathan1111

шаги или алгоритмы, которые я могу адаптировать так, чтобы я мог перехватывать ussd-сообщения, вся цель проекта-прочитать ussd-ответ.

1 Ответов

Рейтинг:
2