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

Estoy construyendo una aplicación de juegos infantiles para Android. Necesito deshabilitar todas las claves cuando está en uso. He fijado la aplicación como la aplicación casera y deshabilitado la llave posterior (que toma el cuidado del botón casero y de la parte posterior). Para borrar la lista de tareas recientes, he creado una lista de actividades dummy que comienzan y terminan cuando se inicia la aplicación. Las actividades simuladas parecen:

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 encarga de cuando alguien intenta mantener la tecla Inicio para mostrar las tareas recientes como crear 8 de éstos y están todos vacíos para que el usuario no puede hacer clic para cambiar las aplicaciones.

Ahora el único botón que no puedo deshabilitar es el botón "Recent Tasks / Apps" (disponible principalmente en dispositivos HTC, es decir, One X, One S, etc.). Este botón parece todavía traer todas las tareas recientes (aunque mis tareas ficticias fueron creadas) y no puedo encontrar un "gancho" para el evento que se dispara cuando se presiona este botón?

Nota: Sé que es factible desde aplicaciones como ToddlerLock lo han hecho …. Simplemente no puedo entenderlo.

Esto cerrará el cuadro de diálogo RecentActivity. Póngalo en su 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(); } } } 

Tendrá que poner el siguiente permiso en su manifiesto.

  <uses-permission android:name="android.permission.GET_TASKS" /> 

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

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

En realidad, no se puede deshabilitar el botón de tarea. Cuando lo presiona, su actividad llama onPause() método onPause() y puede mover su tarea al frente en este método. Vea mi respuesta para la 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 maneja actualmente el botón de inicio (que es lo que es el iniciador de casa actual) tendrían que ser eliminados primero.

Puede desactivar las ventanas 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

 <uses-permission android:name="android.permission.EXPAND_STATUS_BAR" /> 

Espero que esto ayude.

FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.