Android辅助功能com.android.settings:id / left_button关于强制停止不起作用

时间:2015-09-02 15:13:08

标签: java android accessibility

我尝试使用辅助功能,我启用了辅助功能。

但我想使用辅助功能强制停止应用程序,

我尝试使用

 event.getSource().findAccessibilityNodeInfosByViewId("com.android.settings:id/left_button")

在索尼手机中,这是正确的工作。但在HTC手机中,它不起作用。

如何在每部手机中获得强制停止按钮ID?或其他方法?

我的代码如下,非常感谢

 private void forceStopApplication(AccessibilityEvent event) {  

    if (event.getSource() != null) {  
        if (event.getPackageName().equals("com.android.settings")) {  
            List<AccessibilityNodeInfo> stop_nodes = event.getSource().findAccessibilityNodeInfosByViewId("com.android.settings:id/left_button");  

            if (stop_nodes!=null && !stop_nodes.isEmpty()) {  
                AccessibilityNodeInfo node;  
                for(int i=0; i<stop_nodes.size(); i++){  
                    node = stop_nodes.get(i);  
                    if (node.getClassName().equals("android.widget.Button")) {  
                        if(node.isEnabled()){  
                           node.performAction(AccessibilityNodeInfo.ACTION_CLICK);  
                        } else {  
                            performGlobalAction(GLOBAL_ACTION_BACK);  
                        }  
                        node.recycle();  
                    }  
                }  
            }  

            List<AccessibilityNodeInfo> ok_nodes = null;  
            if(event.getText() != null && event.getText().size() == 4) {  
                ok_nodes = event.getSource().findAccessibilityNodeInfosByText(event.getText().get(3).toString());  
            }  
            if (ok_nodes!=null && !ok_nodes.isEmpty()) {  
                AccessibilityNodeInfo node;  
                for(int i=0; i<ok_nodes.size(); i++){  
                    node = ok_nodes.get(i);  
                    if (node.getClassName().equals("android.widget.Button")) {  
                        node.performAction(AccessibilityNodeInfo.ACTION_CLICK);  
                        Log.d("action", "click ok");  
                    }  
                    node.recycle();  
                }  
            }  
        }  
    }  
}  

2 个答案:

答案 0 :(得分:1)

在HTC设备中,强制关闭按钮的ID为force_stop_button,而不是left_button

答案 1 :(得分:1)

您可以使用AccessibilityNodeInfo方法创建所有node.getText()的列表,并找到“强制停止”的节点。

@Override
public void onAccessibilityEvent(AccessibilityEvent accessibilityEvent){
    int eventType = accessibilityEvent.getEventType();

switch (eventType) {

    case AccessibilityEvent.TYPE_WINDOW_STATE_CHANGED:

        AccessibilityNodeInfo rootNode = getRootInActiveWindow();
        ArrayList<AccessibilityNodeInfo> buttonNodes = new ArrayList<AccessibilityNodeInfo>();

        findChildViews(rootNode);

        for(AccessibilityNodeInfo mNode : buttonNodes){
            if(mNode.getText()==null){
                return;
            }
            if(mNode.getText().toString().contentEquals("FORCE STOP"){
                mNode.performAction(AccessibilityNodeInfo.ACTION_CLICK);
            }

        }
        break;

 }
}

方法findChildViews()

private void findChildViews(AccessibilityNodeInfo parentView) {
        if (parentView == null || parentView.getClassName() == null || ) {
            return;
        }

        if (childCount == 0 && (parentView.getClassName().toString().contentEquals("android.widget.Button"))) {
            buttonNodes.add(parentView);
        } else {
            for (int i = 0; i < childCount; i++) {
                findChildViews(parentView.getChild(i));
            }
        }
    }
}

您必须先添加活动名称检查;或者服务将继续检查您打开的每项活动。