Cómo deshabilitar el botón Tareas recientes / Aplicaciones

Estoy construyendo una aplicación de juegos para niños para Android. Necesito deshabilitar todas las claves cuando está en uso. Establecí la Aplicación como la Aplicación de inicio y deshabilité la tecla de retroceso (que se encarga del botón Inicio y Atrás). Para borrar la lista de tareas recientes, he creado una lista de actividades simuladas que comienzan y luego finalizan cuando se inicia la aplicación. Las actividades simuladas se ven así:

public class Dummy1 extends Activity { public void onCreate(Bundle paramBundle) { super.onCreate(paramBundle); finish(); } } 

Y luego en mi onCreate de la aplicación que realizo:

 this.pm.setComponentEnabledSetting(new ComponentName(this, Dummy1.class), PackageManager.COMPONENT_ENABLED_STATE_ENABLED, PackageManager.DONT_KILL_APP); Intent localIntent1 = new Intent(this, Dummy1.class); localIntent1.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK); startActivity(localIntent1); 

Esto se ocupa cuando alguien intenta mantener presionada la tecla de inicio para mostrar las tareas recientes, ya que creo 8 de ellas y están todas vacías, por lo que el usuario no puede hacer clic para cambiar las aplicaciones.

Ahora, el único botón que parece incapacitar es el botón “Tareas / aplicaciones recientes” (disponible principalmente en dispositivos HTC, es decir, One X, One S, etc.). Este botón parece mostrar todas las tareas recientes (aunque mis tareas ficticias fueron creadas) y parece que no puedo encontrar un “gancho” para el evento que se dispara cuando se presiona este botón.

Nota: Sé que es factible ya que aplicaciones como ToddlerLock lo han hecho … Parece que no puedo resolverlo.

Esto cerrará el cuadro de diálogo RecentActivity. Ponlo en tu clase de actividad.

  @Override public void onWindowFocusChanged(boolean hasFocus) { super.onWindowFocusChanged(hasFocus); if (!hasFocus) { windowCloseHandler.postDelayed(windowCloserRunnable, 250); } } 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(); } } } 

Deberá poner el siguiente permiso en su manifiesto.

   

¿Has probado este código?

 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); } } 

Desde: http://www.juliencavandoli.com/how-to-disable-recent-apps-dialog-on-long-press-home-button/

En realidad, no puedes deshabilitar el botón de tarea. Cuando lo presionas, tu actividad llama onPause() método onPause() y puedes mover tu tarea al frente en este método. Ver mi respuesta para una pregunta relacionada.

A mi leal saber y entender, no puede anular el comportamiento del botón de inicio (como la forma en que puede anular el comportamiento del botón ATRÁS) sin que el usuario lo confirme. En otras palabras, los valores predeterminados de la aplicación que actualmente maneja el botón de inicio, que es lo que sea el iniciador de inicio actual, tendrían que borrarse primero.

Puede desactivar las ventanas emergentes de StatusBar:

 @Override public void onWindowFocusChanged(boolean hasFocus) { super.onWindowFocusChanged(hasFocus); try { if (!hasFocus) { Object service = getSystemService("statusbar"); Class statusbarManager = Class.forName("android.app.StatusBarManager"); Method collapse = statusbarManager.getMethod("collapse"); collapse.setAccessible(true); collapse.invoke(service); } } catch (Exception e) { Log.e(TAG, "onWindowFocusChanged - " + e.getCause()); } } 

También debe agregar este permiso en AndroidManifest.xml

  

Espero que esto ayude.