我想使用拨打任何USSD代码(例如*123#)后出现的USSD对话框,该对话框会要求用户输入选项号以执行特定任务(取决于SIM卡供应商)。我需要通过编程与该对话框进行交互,以在其中提供输入文本框。
然而,我能够使用AccessibilityService读取拨打任何USSD代码后出现的警报对话框中的USSD响应,并像以下代码所示在Toast中显示响应。我尚未找到与USSD对话框交互的解决方案。
然而,我能够使用AccessibilityService读取拨打任何USSD代码后出现的警报对话框中的USSD响应,并像以下代码所示在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);
}
}
这里是 Manifest 中的服务声明:
<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>