¿Android comprueba si la aplicación alcanzó fondo cuando el usuario presionó el botón casero?

Soy nuevo a androide y necesito saber siempre que la aplicación reanude de fondo Necesito exhibir un código de paso la pantalla de bloqueo Seguí este acoplamiento y capaz de conseguirlo pero cada vez que utilizo para invocar la intención de la cámara o la intención de la selección de la galería La aplicación va al fondo Y la pantalla de la cerradura está apareciendo en lugar de otro Necesito saber si la aplicación alcanzó fondo en el botón del home del usuario presione

Haz una lista blanca de las acciones "buenas"

Le sugiero que intente pensar en ello al revés. Para las acciones que desea que el usuario realice (como iniciar la cámara o seleccionar de la galería), puede hacer una lista blanca de esa acción.

De esta forma, si cualquier otra causa hace que la aplicación entre en segundo plano (como el usuario recibe una llamada telefónica), puede mostrar la pantalla de bloqueo cuando regresen.

Al iniciar las actividades de cámara o galería, puede definir un requestCode personalizado y comprobarlo cuando vuelvan a su aplicación a través de onActivityResult

Algo como esto:

 private static final String MIME_TYPE = "image/*"; private static final int MY_GALLERY_REQUEST_CODE = 90210; private void launchGallery() { Intent i= new Intent(); i.setType(MIME_TYPE); i.setAction(Intent.ACTION_GET_CONTENT); startActivityForResult(i, MY_GALLERY_REQUEST_CODE); } protected void onActivityResult(int requestCode, int resultCode, Intent data) { if (requestCode == MY_GALLERY_REQUEST_CODE) { //user is returning from the gallery picker } else { showLockScreenIfNeeded(); } } @Override protected void onResume() { showLockScreenIfNeeded(); } 

También desde: Esta otra respuesta SO: onActivityResult () & onResume ()

onActivityResult() debe llamar antes onResume()

De los documentos:

Protected void onActivityResult (int requestCode, int resultCode, Intent data)

Desde: API Nivel 1 Se llama cuando sale una actividad que ha iniciado, dandole el requestCode con el que se inició, el resultCode devuelto, y cualquier información adicional de la misma. El ResultCode será RESULT_CANCELED si la actividad devuelve explícitamente eso, no devolvió ningún resultado, o se estrelló durante su operación. Recibirá esta llamada inmediatamente antes de OnResume () cuando su actividad vuelva a iniciarse.

Puede utilizar el siguiente método para comprobarlo

 @Override protected void onUserLeaveHint() { super.onUserLeaveHint(); // Put your code here } 

OnResume () (o onStart ()) no se puede utilizar para su propósito ya que la llamada de retorno se invoca cada vez que la actividad se hace visible.

En lugar de ello, puede anular onNewIntent (Intent) y, a continuación, comprobar si Intent.FLAG_BROUGHT_TO_FRONT se establece en el indicador dentro de la intención.

Esa bandera es establecida automáticamente por el sistema Android cuando la tarea donde su actividad se lleva de fondo a frente (normalmente pulsando el icono de aplicación de una aplicación que ya se está ejecutando). Esto NO se establece cuando se devuelve la actividad de otra actividad como cámara o galería para adjuntar imágenes. Tenga en cuenta que para utilizar el indicador, debe establecer el modo de inicio de la actividad a 'singleTask'. Para más detalles, consulte http://developer.android.com/reference/android/R.styleable.html#AndroidManifestActivity_launchMode .

Compruebe el siguiente código continuamente que significa u puede utilizar la clase de temporizador.

 ActivityManager activityManager = (ActivityManager) getSystemService(ACTIVITY_SERVICE); List<RunningTaskInfo> runningTasks = null; try { runningTasks = activityManager.getRunningTasks(1); } catch (Exception e) { } RunningTaskInfo runningTaskInfo = runningTasks.get(0); ComponentName topActivity = runningTaskInfo.topActivity; if(topActivity.getPackageName().equals(your packagename)){ Sop("fine");} else{ Sop("application sent to background");} 

He encontrado la manera de superar el problema que describí con la solución @pjco .

Para que sea posible mostrar la pantalla de bloqueo incluso cuando se trae al fondo de las Actividades de terceros, simplemente use FLAG_ACTIVITY_NO_HISTORY al iniciar estas Actividades:

 Intent intent = new Intent(Intent.ACTION_PICK, Images.Media.INTERNAL_CONTENT_URI); intent.addFlags(Intent.FLAG_ACTIVITY_NO_HISTORY); startActivityForResult(intent, REQCODE_PICK_GALLERY); 
  • Intención de recibir notificación sobre el evento de conexión BLE en el periférico Android
  • onClick () confusión de eventos con el parámetro
  • ¿Cómo tomar fotografías de la cámara sin una vista previa cuando se inicia mi aplicación?
  • Ver la ruta del archivo en un gestor de archivos según la intención de Android
  • ¿Está Google Play Music acumulando todas las intenciones de ACTION_MEDIA_BUTTON?
  • Pasar múltiples banderas a una intención en android
  • ¿Cómo puedo abrir el calendario desde mi aplicación?
  • ¿Cómo elegir "cámara frontal" en la nueva intención?
  • Android: Utilice el icono como botón de retroceso sin volver a cargar la actividad anterior
  • ¿qué intentos o apis tiene la aplicación Duo de Google para Android?
  • Manejo de esquemas de URI desconocidos en Android (ejemplo de Bitcoin)
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.