当前位置: 首页 > 知识库问答 >
问题:

如何在android中以编程方式与USSD对话框交互

公孙令秋
2023-03-14
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>

共有1个答案

崔宜修
2023-03-14

为了与USSD对话框交互,我使用了下面的代码。

我对click事件使用了以下代码:

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

我在edittext中对settext使用了下面的代码。这是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();
 类似资料:
  • 我想以编程方式取消系统生成的报警对话框。我已经尝试了这里提供的所有解决方案(stackoverflow)但似乎都不起作用。这是普遍接受的答案,但它只排除了通知面板和最近的任务菜单。 我已经在操作系统版本4.0.3、4.2.2、4.4.2和5.1.1的设备上测试了它,它在所有这些设备上都具有相同的行为。有一些应用程序实际上可以取消所有的系统对话框(Mubble)。有人能建议一下是怎么做的吗? 谢谢

  • 问题内容: 我对joptionpane有疑问。 使用JOptionPane.showMessageDialog(…),我们可以创建一个消息对话框。但是如何以编程方式将其关闭? 问题答案: 您总是可以通过获取其持有的任何组件的WindowAncestor来获得对JOptionPane的引用,然后调用或返回Window。该窗口可以通过使用获得 例如:

  • 问题内容: 在我的应用程序中,我将维护一个联系人列表。 列表中联系人的所有呼叫都将被挂断。他们会在未接来电下显示,但电话不会响铃。 问题答案: 首先创建此接口: 然后创建扩展BroadcastReceiver的此类 这只会阻止该单个电话号码,但是您明白了。 在清单中添加以下内容:

  • 我在用我的代码运行ussd代码。返回结果后,用户将按ok按钮关闭对话框。我想检测用户何时这样做。

  • 编辑:包括示例代码- > mainapp.Java-负责处理应用程序的Java类 controller.java-相应的控制器文件 design.FXML-通过mainapp.java加载并由controller.java控制的应用程序的FXML文件 compute.java-执行计算的另一个java类。 公共类Compute{Alert Alert; } 还有,有没有其他的解决方案可以做到这一点

  • 我在Matlab(GUI)中有一个带有“OK”按钮的对话框。