Как взаимодействовать с диалогом USSD программно в android

Я хочу использовать диалоговое окно USSD, которое появляется после набора кода USSD, например: * 123 #, который просит пользователя ввести номер опции для выполнения определенных задач в зависимости от поставщиков сим-карт. Мне нужно взаимодействовать с этим диалогом, чтобы обеспечить ввод в текстовое поле, заданное в нем программным путем.

Тем не менее, я могу прочитать ответ USSD, который появляется в диалоговом окне Alert Dialog после набора любого кода USSD, используя AccessibilityService и я показываю ответ в Toast как показано в приведенном ниже коде. Я еще не нашел решения для взаимодействия с диалогом USSD.

 public class UssdService extends AccessibilityService{ public static String TAG = "USSD"; @Override public void onAccessibilityEvent(AccessibilityEvent event) { Log.d(TAG, "onAccessibilityEvent"); String text = event.getText().toString(); if (event.getClassName().equals("android.app.AlertDialog")) { Log.d(TAG, text); Toast.makeText(this, text, Toast.LENGTH_LONG).show(); } } @Override public void onInterrupt() { } @Override protected void onServiceConnected() { super.onServiceConnected(); Log.d(TAG, "onServiceConnected"); AccessibilityServiceInfo info = new AccessibilityServiceInfo(); info.flags = AccessibilityServiceInfo.DEFAULT; info.packageNames = new String[]{"com.android.phone"}; info.eventTypes = AccessibilityEvent.TYPE_WINDOW_STATE_CHANGED; info.feedbackType = AccessibilityServiceInfo.FEEDBACK_GENERIC; setServiceInfo(info); } } 

Вот объявление сервиса в манифесте:

 <service android:name=".UssdService" android:permission="android.permission.BIND_ACCESSIBILITY_SERVICE"> <intent-filter> <action android:name="android.accessibilityservice.AccessibilityService" /> </intent-filter> <meta-data android:name="android.accessibilityservice" android:resource="@xml/config_service" /> </service> 

Для взаимодействия с диалогом USSD я использовал ниже код.

Я использовал приведенный ниже код для события click:

 List<AccessibilityNodeInfo> list = nodeInfo.findAccessibilityNodeInfosByText("Send"); for (AccessibilityNodeInfo node : list) { node.performAction(AccessibilityNodeInfo.ACTION_CLICK); } 

Я использовал приведенный ниже код для setText в EditText . Это setText где текущий фокус.

 AccessibilityNodeInfo nodeInput = nodeInfo.findFocus(AccessibilityNodeInfo.FOCUS_INPUT); Bundle bundle = new Bundle(); bundle.putCharSequence(AccessibilityNodeInfo.ACTION_ARGUMENT_SET_TEXT_CHARSEQUENCE,pMPIN); nodeInput.performAction(AccessibilityNodeInfo.ACTION_SET_TEXT,bundle); nodeInput.refresh(); 
Intereting Posts