如何在android中以编程方式与USSD对话框交互
我想使用USSD对话框,它是在拨打任何USSD代码后出现的比如说*123#,它要求用户输入选项号,以根据sim卡供应商执行特定任务。我需要与该对话框交互,以编程方式在文本框中提供输入 但是,我可以使用如何在android中以编程方式与USSD对话框交互,android,android-alertdialog,ussd,sim-card,accessibilityservice,Android,Android Alertdialog,Ussd,Sim Card,Accessibilityservice,我想使用USSD对话框,它是在拨打任何USSD代码后出现的比如说*123#,它要求用户输入选项号,以根据sim卡供应商执行特定任务。我需要与该对话框交互,以编程方式在文本框中提供输入 但是,我可以使用AccessibilityService在拨打任何USSD代码后读取警报对话框中的USSD响应,并在Toast中显示响应,如下代码所示。我还没有找到任何与USSD对话交互的解决方案 public class UssdService extends AccessibilityService{
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);
}
}
以下是清单中的服务声明:
<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对话框交互,我使用了下面的代码 我在点击事件中使用了以下代码:
List<AccessibilityNodeInfo> list = nodeInfo.findAccessibilityNodeInfosByText("Send");
for (AccessibilityNodeInfo node : list) {
node.performAction(AccessibilityNodeInfo.ACTION_CLICK);
}
我的公司已经开发了一个Android SDK,它使用易访问性服务来运行多步骤USSD会话,并让它看起来发生在你的应用程序中。底层方法与公认答案中概述的方法类似,但有更多的抽象层,支持许多行为不同的设备,并且对用户隐藏会话
您为USSD服务创建配置,触发会话从应用程序运行,并传入所需的任何运行时变量。返回响应后,会通知您的应用程序,您可以根据需要对其进行解析。它在安卓4.3及以上版本上运行
SDK可以自由集成和使用,直到达到大规模。请看我们的网站开始
(披露:我是Hover的首席技术官)如果您想设置点击事件,请使用下面的代码列表List=nodeInfo.findAccessibilityNodeInfosByText(“发送”);对于(AccessibilityNodeInfo节点:列表){node.performation(AccessibilityNodeInfo.ACTION_CLICK);isDialogClose=true;}如何获取nodeInfo?我希望您能给出更长的解释。我不知道如何使用你的代码,尽管它为我指明了正确的方向。
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();