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.
- No se puede llamar a runOnUiThread en un subproceso desde dentro de un servicio
- StopService no deja de ser mi servicio ... ¿por qué?
- Servicio Android Jelly Bean que recibe todos los eventos de toque
- Detener servicio cuando la aplicación está cerrada
- Android Shared Service?
¿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.
- Android: intent.putExtra en una clase de servicio para obtener notificaciones
- Android Service preguntas sobre bind / unbind?
- Servicio enlazado versus servicio iniciado en Android y cómo hacer ambas cosas
- Corregir el patrón para adquirir un WakeLock en un BroadcastReceiver y liberarlo en un servicio
- Cómo autenticar servicio web sap con ksoap2
- Robospice en el contexto android.os.Service
- ¿Cómo comprobar si un servicio ya se está ejecutando o no en android?
- La mejor manera de determinar la aplicación actual (en ejecución) actual (utilizando un servicio?)
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
.
- Icono de Lanzador y actividad separado con Android
- ¿Cómo puedo obtener el valor de EditText en android?