我尝试使用辅助功能,我启用了辅助功能。
但我想使用辅助功能强制停止应用程序,
我尝试使用
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();
}
}
}
}
}
答案 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));
}
}
}
}
您必须先添加活动名称检查;或者服务将继续检查您打开的每项活动。