Android: ¿cómo mostrar un diálogo sobre una pantalla nativa?

Me preguntaba si alguien puede decir si abrir una pantalla de diálogo en una pantalla nativa de Android.

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 de que bash de llamada ha sido bloqueado y permitirles tener algunas nuevas opciones de el 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 abrir un cuadro de diálogo cuando la llamada quede atrapada.

Este es mi código de diálogo hasta el momento

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

Supongo que de alguna manera tengo que hacer que el contexto sea el de la pantalla del marcador.

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

Gracias por adelantado

Para mi aplicación, utilicé una actividad con el tema Dialog . Puede declarar el tema en el archivo de manifiesto:

  
  • use launcheMode="singleInstance" y taskAffinity="" si su ventana emergente está separada 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 que su ventana emergente aparezca en las tareas recientes (manténgala presionada)
  • theme="@android:style/Theme.Dialog" para establecer el tema del diálogo.

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

No he visto una explicación clara de cómo configurar estos indicadores programáticamente, 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 debería ser responsable de cuándo es apropiado mostrar un 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);