Search code examples
androidussd

Android - Interacting with USSD dialog programmatically


Is there a way for an Android app to interact with the USSD dialog programmatically? The app runs on rooted phone and will not be published to google store (only for internal usage).

I'm aware that we can read the response of an USSD dialog (using accessibility hack). But what I'm trying to achieve here is to let the USSD dialog open and interact with it just like a normal user interact with it using the soft keyboard. Thanks.


Solution

  • In the onAccessibilityEvent, you will need to first capture the input field, then fill it with your text, then click the "Send" (as explained by @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);
        }
    }