Android - Программное взаимодействие с диалогом USSD

Есть ли способ для приложения Android программно взаимодействовать с диалогом USSD? Приложение работает на рутированном телефоне и не будет опубликовано в магазине Google (только для внутреннего использования).

Я знаю, что мы можем прочитать ответ диалога USSD (используя доступность). Но здесь я пытаюсь добиться того, чтобы открыть диалоговое окно USSD и взаимодействовать с ним так же, как обычный пользователь взаимодействует с ним с помощью программной клавиатуры. Спасибо.


person kasyauqi    schedule 04.03.2016    source источник


Ответы (3)


В onAccessibilityEvent вам нужно будет сначала захватить поле ввода, затем заполнить его своим текстом, затем нажать «Отправить» (как объяснил @lewil ngah)

AccessibilityNodeInfo source = event.getSource();
if (source != null) {
    //capture the EditText simply by using FOCUS_INPUT (since the EditText has the focus), you can probably find it with the viewId input_field
    AccessibilityNodeInfo inputNode = source.findFocus(AccessibilityNodeInfo.FOCUS_INPUT);
    if (inputNode != null) {//prepare you text then fill it using ACTION_SET_TEXT
        Bundle arguments = new Bundle();
        arguments.putCharSequence(AccessibilityNodeInfo.ACTION_ARGUMENT_SET_TEXT_CHARSEQUENCE,"text to enter");
        inputNode.performAction(AccessibilityNodeInfo.ACTION_SET_TEXT, arguments);
    }
    //"Click" the Send button
    List<AccessibilityNodeInfo> list = source.findAccessibilityNodeInfosByText("Send");
    for (AccessibilityNodeInfo node : list) {
        node.performAction(AccessibilityNodeInfo.ACTION_CLICK);
    }
}
person Abdu    schedule 11.06.2017

Танк Прайест тау. Для меня работает нормально.

в функции onAccessibilityEvent реализации AccessibilityService

AccessibilityNodeInfo nodeInfo = event.getSource();
    List<AccessibilityNodeInfo> list = nodeInfo.findAccessibilityNodeInfosByText("Send");
    for (AccessibilityNodeInfo node : list) {
        node.performAction(AccessibilityNodeInfo.ACTION_CLICK);
    }
person lewile ngah    schedule 31.01.2017
comment
Это на самом деле работает, чтобы закрыть диалоговое окно предупреждения (нажимает на отправку). Однако вам нужно убедиться, что nodeInfo не равно нулю, то есть: AccessibilityNodeInfo nodeInfo = event.getSource(); if (nodeInfo!=null) { List‹AccessibilityNodeInfo› list = ... - person Abdu; 11.06.2017

Используя службу специальных возможностей, мы можем прочитать ответ USSD и можем взаимодействовать с диалоговым окном ussd. Мы можем передать значение в диалоговое окно USSD. Для меня работает нормально.

person Rajesh P    schedule 23.05.2016