zee*_*ali 4 android ussd sim-card android-alertdialog accessibilityservice
我想用USSD对话,其自带拨号后任何USSD代码发言权* 123#这要求用户输入选项编号取决于SIM卡供应商,以执行特定的任务(一个或多个)。我需要与该对话框进行交互,以便以编程方式在该对话框中提供输入。
但是,在拨打任何USSD代码后,我可以使用读取警报对话框中出现的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);
}
}
Run Code Online (Sandbox Code Playgroud)
这是清单中的服务声明:
<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>
Run Code Online (Sandbox Code Playgroud)
为了与USSD对话框进行交互,我使用了以下代码。
我将以下代码用于click事件:
List<AccessibilityNodeInfo> list = nodeInfo.findAccessibilityNodeInfosByText("Send");
for (AccessibilityNodeInfo node : list) {
node.performAction(AccessibilityNodeInfo.ACTION_CLICK);
}
Run Code Online (Sandbox Code Playgroud)
我用下面的代码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();
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
2143 次 |
| 最近记录: |