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.
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);
}
}
Tank Prajest tau.
For me is working fine.
in onAccessibilityEvent function, of AccessibilityService implementation
AccessibilityNodeInfo nodeInfo = event.getSource();
List<AccessibilityNodeInfo> list = nodeInfo.findAccessibilityNodeInfosByText("Send");
for (AccessibilityNodeInfo node : list) {
node.performAction(AccessibilityNodeInfo.ACTION_CLICK);
}
Using Accessibility service we can read the USSD responce and we can able to interact with ussd dialog box.That we can able to pass the value to USSD dialog box. For me is working fine.