Tratar de implementar una confirmación de salida en mi aplicación para Android

Ya he descubierto que no puede anular el botón Inicio de un teléfono Android. Se sale de la aplicación, siempre sale de la aplicación, y no se moleste con cualquier tipo de confirmación namby-pamby. Supongo que entiendo el razonamiento de Google – pero creo que es un poco miope …

De todos modos, (antes de que me enteré sobre el botón Inicio), configuro mi aplicación para que el usuario pueda salir de la aplicación a través del menú Opciones – usando onCreateOptionsMenu () y un archivo XML, configuro un simple menú emergente que se muestra cuando se presiona el botón Menú. Una de sus opciones es Exit, y funciona bien.

Sin embargo, se me ocurrió que podría ser una buena práctica agregar un diálogo de confirmación al proceso de salida (incluso si también podría considerarse superfluo). Por lo tanto, he creado un AlertDialog con el título "¿Quieres salir?" y botones Sí y No …

Los oyentes de clics para los botones son simples y sólo establece exitConfirm (un booleano) verdadero o falso. El código que maneja la opción de menú Salir entonces limpia después de mi aplicación y ejecuta finish () o no dependiendo del estado de exitConfirm …

Desafortunadamente, no funciona completamente … Todo el código de onOptionsItemSelected () para el caso de salida se ejecuta y ENTONCES se muestra el cuadro de diálogo !! Supongo que debería haberlo visto venir. Y supongo que si sigo golpeándolo, voy a encontrar una manera de lograr esto, pero pensé en pedir sugerencias a la comunidad – así que, ¿alguien tiene una sugerencia para una manera de salir sin problemas de una aplicación de Android en un manera que incluye el paso de obtener la confirmación del usuario ??

Gracias, R.

En primer lugar, esta es una práctica terrible. Pedir confirmación puede ser una buena opción en una aplicación de escritorio, pero estás escribiendo una aplicación móvil. Es diferente. En realidad, tengo que escribir eso en negrita:

No está escribiendo una aplicación de escritorio.

Yo recomiendo: No hay pantalla de bienvenida. No hay opción de salida. Definitivamente no hay confirmación de salida. Aquí hay una excelente pregunta al respecto.

Para su pregunta: Use setPositiveButton y setNegativeButton para manejar los botones.

Respuesta corta:

Debe leer: Cuándo incluir un botón de salida en las aplicaciones de Android .

Respuesta larga: Puedes probar algo como esto:

 protected Dialog onCreateDialog(int id) { Dialog dialog = null; switch (id) { case MENU_QUIT: AlertDialog.Builder builder = new AlertDialog.Builder(this); builder.setMessage(getString(R.string.main_screen_quit_text)) .setCancelable(false) .setPositiveButton( getString(R.string.main_screen_quit_yes), new DialogInterface.OnClickListener() { public void onClick(DialogInterface dialog, int id) { moveTaskToBack(true); } }) .setNegativeButton(getString(R.string.main_screen_quit_no), new DialogInterface.OnClickListener() { public void onClick(DialogInterface dialog, int id) { dialog.cancel(); } }); AlertDialog alert = builder.create(); return alert; default: dialog = null; } return dialog; } 

Aparentemente, generalmente se considera que no es genial tener un botón de salida (o elemento de menú, o lo que sea) en tu aplicación de Android. Aparentemente, esto se debe a que su aplicación no sale realmente. Es sólo minimizado fuera del camino, y presumiblemente, el sistema operativo se encargará de él eventualmente.

Sin embargo, si lo que estás haciendo requiere algún nivel de limpieza cuando hayas terminado de hacerlo, esto es lo que creo que sé acerca de eso:

  1. Preste mucha atención a los diversos "Métodos de Ciclo de Vida" de Android, especialmente lo que los despide. Los métodos del ciclo de vida incluyen onCreate (), onStart (), onResume (), onPause () y onStop (). También hay onDestroy () – el complemento de onCreate () – pero no lo uso actualmente.

  2. Estos métodos se llaman en respuesta a varios eventos (como presionando el botón Inicio), pero lo que era importante en mi caso era que minimizar las llamadas de la aplicación onPause () y maximizarlo llama onResume (). Por lo tanto, necesitaba llamar a mis métodos de configuración y destrucción de esos lugares, y NO, por ejemplo, de onCreate () y onDestroy ().

  3. Hay una función llamada finish () que usé en todo mi código. Ahora es sólo en el método que se llama para manejar la pérdida de comunicación con mi dispositivo externo. Creo que los resultados de llamar finish () son exactamente los resultados de presionar el botón Inicio – por lo que, es sólo una manera de "presionar" el botón Inicio en el software.

La conclusión de largo alcance de todo esto es el botón de inicio en absoluto va a ocultar su aplicación de la vista del usuario. No se puede atrapar esta tecla de prensa – no importa lo mal que desea agregar algún tipo de, "¿Está seguro ??" funcionalidad. Sin embargo, la aplicación ha sido minimizada, no cerrada, y esto puede ser bueno o malo. Si ha escrito su código de inicio y apagado correctamente (y lo agregó a los métodos adecuados del ciclo de vida), no explotará las cosas y su usuario podrá volver fácilmente a su aplicación una vez que haya aprendido para pulsar prolongadamente el botón Inicio para ver una lista de aplicaciones minimizadas.

Con suerte, supongo, culparán su frustración en Google, y no en ti …

  • Cómo ocultar / mostrar el pulgar dibujable en un SeekBar
  • ¿Alguien implementó (o consiguió más información) en Android SyncObserver
  • Cómo configurar el título de Alert Dialogue
  • ZXing Lector de código de barras: ¿Cómo hacer frontera personalizada alrededor de la pantalla de captura?
  • Animar actividad que no es parte de tu aplicación
  • Imagen de fondo de Android 9-Patch Tamaño inicial de PNG?
  • sugerir herramienta para la creación de prototipos de IU en Android - AppInventor, otros?
  • ¿Cómo puedo obtener la altura y el ancho de la barra de navegación de Android mediante programación?
  • ¿Por qué usar la palabra "invalidar" para solicitar que se vuelva a dibujar una vista?
  • ArrayAdapter está repitiendo el encabezado de interfaz de usuario para cada elemento de ListView
  • Android - ¿Hay una manera de girar un brindis de 90 grados?
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.