我尝试使用辅助功能,我已启用辅助功能.
但我想使用辅助功能强制停止应用程序,
我尝试使用
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();
}
}
}
}
}
解决方法:
您可以使用node.getText()方法创建所有AccessibilityNodeInfo的列表,并找到具有“强制停止”的节点作为其文本.
@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));
}
}
}
}
您必须先添加活动名称检查;或者服务将继续检查您打开的每项活动.
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。