Accesibilidad de Android com.android.settings: id / left_button sobre la fuerza no funciona

Trato de usar la accesibilidad, tengo habilitar la accesibilidad.

Pero quiero usar la accesibilidad para obligar a detener la aplicación,

Yo trato de usar

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

En el teléfono celular sony, es el trabajo correcto. Pero en el teléfono celular HTC, no es trabajo.

¿Cómo puedo obtener el ID de botón de parada de fuerza en cada teléfono celular? U otros métodos?

Mi código de abajo, muchas gracias

  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 Solutions collect form web for “Accesibilidad de Android com.android.settings: id / left_button sobre la fuerza no funciona”

Puede crear una lista de todos los AccessibilityNodeInfo y encontrar el nodo que tiene 'Force Stop' como es el texto usando el método 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; } } 

Método 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)); } } } } 

Usted tiene que agregar un cheque para el nombre de la actividad primero; O el servicio continuará comprobando cada actividad que abra.

En el dispositivo HTC, el botón de cierre de la fuerza tiene ID: force_stop_button , not left_button

  • ¿Cómo deslizar la imagen con el toque de dedo en Android?
  • ¿Pueden las aplicaciones de Android tener sus variables leídas / fijadas malévola?
  • Obtener la duración del mp3 en android
  • Android Game API: Leaderboard - ¿Obtener puntuación de jugador específico?
  • Cómo agregar superposición en google maps API v2 | Android |
  • Cómo obtener el icono de otras aplicaciones (Android)
  • En la aplicación de facturación - BillingHelper no completamente instanciado
  • Dagger 2 Inyectando Constructores
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.