botón de aplicaciones recientes de interceptación de Android

Tengo una aplicación para niños y no quiero que puedan hacer clic en el botón “Aplicaciones recientes” (el que se ve como dos rectangularjs uno encima del otro). Me estoy ocupando de capturar el botón Atrás y el botón de inicio y he buscado y leído mucho acerca de tratar de capturar el botón de Aplicaciones Recientes, pero la mayoría dice que no se puede o la forma en que lo hacen es muy cuestionable.

La aplicación “Kids Place” muestra una vista que dice “Acción no permitida” y te redirige a su pantalla de inicio si presionas el botón de Aplicaciones recientes, esto funciona incluso si estás en una aplicación diferente, entonces, ¿cómo lo están haciendo?

Cualquier sugerencia, sugerencias serían apreciadas.

Gracias.

Después de mucha búsqueda y encoding, la mejor solución actual que encontré es la siguiente:

@Override public void onWindowFocusChanged(boolean hasFocus) { super.onWindowFocusChanged(hasFocus); if (!hasFocus) { windowCloseHandler.postDelayed(windowCloserRunnable, 0); } } private void toggleRecents() { Intent closeRecents = new Intent("com.android.systemui.recent.action.TOGGLE_RECENTS"); closeRecents.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_EXCLUDE_FROM_RECENTS); ComponentName recents = new ComponentName("com.android.systemui", "com.android.systemui.recent.RecentsActivity"); closeRecents.setComponent(recents); this.startActivity(closeRecents); } private Handler windowCloseHandler = new Handler(); private Runnable windowCloserRunnable = new Runnable() { @Override public void run() { ActivityManager am = (ActivityManager)getApplicationContext().getSystemService(Context.ACTIVITY_SERVICE); ComponentName cn = am.getRunningTasks(1).get(0).topActivity; if (cn != null && cn.getClassName().equals("com.android.systemui.recent.RecentsActivity")) { toggleRecents(); } } } 

Esto requiere que uses

Al usar este enfoque cuando el usuario presiona el botón de aplicaciones recientes, su actividad pasará por el ciclo de vida de la actividad de la siguiente manera: onPause -> onWindowFocusChanged -> onResume.

Para el usuario, el comportamiento parece que presionar el botón de aplicaciones recientes no tiene respuesta. NOTA: que he encontrado que si presiona el botón de aplicaciones recientes rápidamente, se mostrará esa vista por un breve período de tiempo.

Esta no es la mejor solución, pero es una puñalada. Si tiene una mejor solución, por favor comparta.

La mejor manera que he encontrado es hacer esto:

 public class BaseActivity extends Activity { public void onWindowFocusChanged(boolean hasFocus) { super.onWindowFocusChanged(hasFocus); Log.d("Focus debug", "Focus changed !"); if(!hasFocus) { Log.d("Focus debug", "Lost focus !"); Intent closeDialog = new Intent(Intent.ACTION_CLOSE_SYSTEM_DIALOGS); sendBroadcast(closeDialog); } } }// all credit goes here: http://www.juliencavandoli.com/how-to-disable-recent-apps-dialog-on-long-press-home-button/ 

Este no es mi propio código, pero esto oculta la lista de aplicaciones recientes.

En la respuesta aceptada, está utilizando ClassName solo para Android 4.2 – 4.4. No funcionará en 5.0 y superior, o Android 4.1.

Aquí está la lista de ClassNames para las principales versiones de Android:

  • Android 4.1: “com.android.internal.policy.impl.RecentApplicationsDialog”
  • Android 4.2 – 4.4: “com.android.systemui.recent.RecentsActivity”
  • Android 5.0 – 7.1: “com.android.systemui.recents.RecentsActivity” (se agregó la letra “s”)

La mejor solución para usted será utilizar el servicio de accesibilidad. onAccessibilityEvent() método onAccessibilityEvent() , onAccessibilityEvent() ClassNames enumerados anteriormente y haga algo cuando detecte este evento. Por ejemplo, simule presionar el botón ‘Inicio’. Puede hacer esto realizando una acción global en el Servicio de accesibilidad.

gracias esse por la solución para mayor SDK! Me lo perdi.

Pero en mi caso necesito duplicar la llamada (o el efecto es inestable)

  if (SDK>15){ windowCloseHandler.postDelayed(windowCloserRunnable, 10); windowCloseHandler.postDelayed(windowCloserRunnable, 300); } 

Si está interesado en deshabilitar todos los botones del sistema, la opción sería eliminar completamente la barra del sistema, consulte la forma fácil de ocultar la barra del sistema en Android ICS.