我有一个AccessibilityEvent
可以自动停止应用。但是当启动app info intent时,它会进入无限循环的开启/关闭警告对话框。
我该如何预防呢?这是代码:
@Override
public void onAccessibilityEvent(AccessibilityEvent event) {
if (AccessibilityEvent.TYPE_WINDOW_STATE_CHANGED == event
.getEventType()) {
AccessibilityNodeInfo nodeInfo = event.getSource();
if (nodeInfo == null) {
return;
}
List<AccessibilityNodeInfo> list = nodeInfo
.findAccessibilityNodeInfosByViewId("com.android.settings:id/force_stop_button");
for (AccessibilityNodeInfo node : list) {
Log.i(TAG, "check1 = " + check);
node.performAction(AccessibilityNodeInfo.ACTION_CLICK);
check = true;
}
list = nodeInfo
.findAccessibilityNodeInfosByText("CANCEL");
for (AccessibilityNodeInfo node : list) {
node.performAction(AccessibilityNodeInfo.ACTION_CLICK);
}
}
}
顺便说一下,在应用信息意图开始后立即点击force_stop_button
的想法是什么意思?
AccessibilityEvent.TYPE_WINDOW_STATE_CHANGED
。如果我绕过那个检查,它可以工作,但真的很难控制。
答案 0 :(得分:2)
在您的代码中,只要AccessibilityService在“设置”活动中检测到“强制停止”按钮,就会单击该按钮。 现在,将显示一个对话框,其中包含两个按钮:Ok&amp;取消。 然后,您将在取消按钮上执行点击操作。
所以,App Info - &gt;对话 - &gt;取消 - &gt;应用信息 - &gt;对话 - &gt;取消......
是你将获得的循环。
更改list = nodeInfo.findAccessibilityNodeInfosByText("CANCEL");
到list = nodeInfo.findAccessibilityNodeInfosByText("OK");
要点击某个节点,您必须添加一些延迟:
new Handler().postDelayed(new Runnable() {
@Override
public void run() {
node.performAction(AccessibilityNodeInfo.ACTION_CLICK);
}
}, 300);