¿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
- Iniciar una intención de cámara, pero no guardar imagen
- Abrir varias imágenes en la intención de la galería
- Descripción de Intent.FLAG_ACTIVITY_CLEAR_TOP
- ¿Cómo borrar correctamente los datos de intenciones de la actividad SingleTop?
- Obtención de un contexto para la geolocalización dentro de un IntentService
- Intención de Android para capturar imágenes y videos?
- Android: Null Pointer Excepción al llamar a una nueva intención
- intento de lanzamiento de eclipse androide para mapa con una dirección en lugar de latitud y longitud
- Fragmento de la prensa de OnBack que muestra la pantalla en blanco
- Abrir una aplicación de Android dentro de otra
- Abra otra aplicación de su propia (intención)
- TIMEZONE_CHANGED intención que se recibe cada pocos segundos
- Método de ContentValues put
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);
- Google Google Fit onConnectionFailed () SIGN_IN_REQUIRED
- Cómo proteger una base de datos sqlite pre hecho en android?