Inicio del cuadro de diálogo del servicio

Quiero lanzar un diálogo de un servicio que se cierne sobre lo que el usuario está mirando actualmente. El cuadro de diálogo se ejecuta de la siguiente manera: el servicio obtiene el disparador para abrir el diálogo> inicia la actividad transparente> la actividad transparente muestra el diálogo.

Mi problema es cuando el usuario abre la aplicación, se lanza al menú principal y luego presiona HOME para salir. Presionando HOME, deja la actividad del menú principal en pausa, no destruida, y cuando el servicio inicia el diálogo, el menú principal se muestra debajo de la actividad transparente; Haciendo que el diálogo pierda el efecto de flotar sobre lo que el usuario está mirando.

¿Cómo puede hacerlo para que la actividad transparente se abra independientemente de cualquier otra actividad en la aplicación? La única manera de prevenir esto actualmente es terminar todas las actividades cuando están en pausa; Pero esto no es práctico.

Esto es lo último que queremos. Todos los derechos reservados

1. Cuadros de diálogo de Servicios

Una de las mejores experiencias en dispositivos móviles, IMHO, y Android en particular, es que después de décadas, nos deshicimos de todo el sistema, los diálogos de alerta molestos. Por último, las mejores prácticas [ 1 , 2 ] para la interacción del usuario nos dio una manera de evitar el infame uso diseminado de MessageBox(hwnd, lpText, lpCaption, uType) , compitiendo por el enfoque y para la atención del usuario pobre. Vea la parodia video arriba.

La razón por la que se siente incómodo para iniciar un diálogo desde un Service es exactamente porque se supone que es una tarea de fondo, sin la interacción del usuario. Por concepto, usted no debe hacer esto. Esa es la razón por la que vemos estos trucos (actividades transparentes, qué tontería) para engañar las directrices de diseño en primer lugar. Son malos, interrumpen la experiencia del usuario, roban el foco y la atención. Interrumpen nuestro trabajo.

2. Utilice notificaciones en su lugar

Siempre que desee notificar a un usuario de algo de fondo, cuando el usuario está en otro lugar, utiliza una notificación. Es el patrón predeterminado, y no molesta al usuario.

Por lo tanto, debe enviar notificaciones de su Service .

A partir de ahí, si el usuario está interesado , entonces tocará la notificación y comenzará su propia actividad, posiblemente reanudando su actividad, creando una nueva y luego utilizando un diálogo solicitando que se realice la acción, o lo que desee hacer.

3. Por último, NO utilice FLAG_ACTIVITY_MULTIPLE_TASK

Usted no debe , nunca , usar esta bandera a menos que usted haya leído cuidadosamente y entendido completamente la documentación , y las implicaciones de usar esa bandera.

No utilice este indicador a menos que esté implementando su propio lanzador de aplicaciones de nivel superior. (…) Debido a que el sistema predeterminado no incluye la administración de tareas gráficas, no debe usar este indicador a menos que proporcione alguna forma para que un usuario regrese a las tareas que ha iniciado.

De Verdad. En este caso, simplemente no.

Puede considerar usar alertDialog con TYPE_SYSTEM_ALERT lugar de actividad:

 AlertDialog alertDialog = new AlertDialog.Builder(this) .setTitle("Title") .setMessage("Are you sure?") .create(); alertDialog.getWindow().setType(WindowManager.LayoutParams.TYPE_SYSTEM_ALERT); alertDialog.show(); 

Tenga en cuenta que debe utilizar el siguiente permiso:

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

Encontré esto mismo, solo agrega el indicador de Intent.FLAG_ACTIVITY_MULTIPLE_TASK al Intent de lanzamiento; Por supuesto en conjunción con el indicador Intent.FLAG_ACTIVITY_NEW_TASK .

  • Context.startService (intento) o startService (intención)
  • ¿Android mata cada servicio o el proceso entero?
  • Descargar varios archivos utilizando un servicio en android
  • Android: No se pudo importar la clase java.util.ArrayList en el archivo aidl
  • ¿Cómo mantener una aplicación Android funcionando indefinidamente?
  • ¿Necesita un ejemplo de código sobre cómo ejecutar un servicio Android para siempre en segundo plano incluso cuando el dispositivo está durmiendo, como Whatsapp?
  • Paho MqttAndroidClient.connect siempre falla
  • Android MediaProjectionManager en servicio
  • Android Asynctask vs Runnable vs timertask vs Servicio
  • Delphi xe10 gps del servicio del androide
  • ¿Qué significa la pérdida de una conexión de servicio?
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.