2010-01-27 9 views
17

Me preguntaba si alguien puede decir si abrir una pantalla de diálogo en una pantalla nativa de Android.Android - ¿Cómo mostrar un cuadro de diálogo sobre una pantalla nativa?

Actualmente tengo una aplicación que atrapa una llamada saliente y la detiene, luego quiero abrir un cuadro de diálogo que tomaría el relevo de la pantalla del marcador y alertar al usuario que intento de llamada ha sido bloqueado y permitirles tener algunas nuevas opciones del diálogo.

Sé que algunas personas dirán que debería usar notificaciones en su lugar, pero soy consciente de eso y no es la forma en que debería funcionar. Necesito poder mostrar un cuadro de diálogo cuando la llamada quede atrapada.

Este es mi código de diálogo hasta ahora

AlertDialog LDialog = new AlertDialog.Builder(context) 
    .setTitle("Call Blocked") 
    .setMessage("Call Blocked, reroute call?") 
    .setPositiveButton("ok", null).create(); 
     LDialog.show(); 

supongo que tengo que hacer el contexto sea de alguna manera la de la pantalla del marcador?

¿Alguien puede ofrecer ayuda y asistencia o enlaces a tutoriales?

Gracias de antemano

Respuesta

56

Para mi solicitud me utilizan una actividad con el tema Dialog. Se puede declarar el tema en el archivo de manifiesto:

<activity android:name="PopupActivity" 
    android:launchMode="singleInstance" android:excludeFromRecents="true" 
    android:taskAffinity="" android:theme="@android:style/Theme.Dialog" /> 
  • uso launcheMode="singleInstance"taskAffinity="" y si su emergente se separa de su aplicación principal. De lo contrario, el usuario puede hacer clic en el botón Atrás y regresar a la actividad anterior de su aplicación.
  • excludeFromRecents="true" para evitar su emergente para aparecer en las tareas recientes (pulsación larga en casa)
  • theme="@android:style/Theme.Dialog" a establecer el tema de diálogo.
+3

Gracias Thomas, que es una excelente solución –

+0

Excelente solución, gracias! ¡Me ahorro mucho tiempo! – mDroidd

+0

¡Te amo, literalmente, tbruyelle! añadiendo taskAffinity = "" resolvió el problema que me estaba molestando desde TAN largo! – Daksh

4

cómo obtener el equivalente de launchMode = singleTask en el código

No he visto una clara explicación de cómo configurar estas banderas mediante programación, por lo que incluirá mis resultados aquí. tldr: debe establecer FLAG_ACTIVITY_NEW_TASK y FLAG_ACTIVITY_MULTIPLE_TASK.

Si inicia esto directamente desde su aplicación, su cuadro de diálogo aparecerá en la parte superior de la última actividad de su aplicación. Pero si utiliza una transmisión PendingIntent por AlarmManager para iniciar su "diálogo", tiene tiempo de cambiar a una aplicación diferente para que pueda ver que su "diálogo" aparecerá sobre esa otra aplicación, si el estilo está configurado apropiadamente para mostrar qué está detrás de esto.

Obviamente uno debe ser responsable de cuándo es apropiado mostrar un cuadro de diálogo sobre otras aplicaciones.

public class MyReceiver extends BroadcastReceiver { 
    @Override 
    public void onReceive(Context context, Intent intent) { 

// you have to set these flags here where you receive the broadcast 
// NOT in the code where you created your pendingIntent 
    Intent scheduledIntent = new Intent(context, AlertAlarmActivity.class); 
    scheduledIntent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK); 
    scheduledIntent.addFlags(Intent.FLAG_ACTIVITY_MULTIPLE_TASK); 
    context.startActivity(scheduledIntent); 
Cuestiones relacionadas