Android-Как отобразить диалог на родном экране?

мне было интересно, может ли кто-нибудь сказать, как открыть диалоговое окно над родным экраном Android?

в настоящее время у меня есть приложение, которое ловит исходящий вызов и останавливает его, затем я хочу открыть диалоговое окно, которое возьмет на себя экран дозвона и предупредит пользователя, что попытка вызова заблокирована и позволит им иметь некоторые новые параметры из диалога.

Я знаю, что некоторые люди скажут, что я должен использовать уведомления, но я знаю из этого и его не так, как он должен работать, мне нужно иметь возможность всплывать диалог, когда вызов попадает в ловушку.

Это мой код диалога до сих пор

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

Я предполагаю, что я должен каким-то образом получить контекст, чтобы быть экраном дозвона?

кто-нибудь может предложить любую помощь или ссылки на учебники?

спасибо заранее

2 ответов


для моего приложения, я использовал действия с Dialog тема. Вы можете объявить тему в файле манифеста :

<activity android:name="PopupActivity"
  android:launchMode="singleInstance" android:excludeFromRecents="true"
  android:taskAffinity="" android:theme="@android:style/Theme.Dialog" />
  • использовать launcheMode="singleInstance" и taskAffinity="" если всплывающее окно отсоединено от основного приложения. В противном случае пользователь может нажать кнопку назад и вернуться к предыдущей деятельности вашего приложения.
  • excludeFromRecents="true" чтобы избежать всплывающего окна, чтобы появиться в последних задачах (длительное нажатие home)
  • theme="@android:style/Theme.Dialog" чтобы установить тему диалога.

Как получить эквивалент launchMode = singleTask в коде

Я не видел четкого объяснения того, как установить эти флаги программно, поэтому я включу свои результаты здесь. tldr: вы должны установить FLAG_ACTIVITY_NEW_TASK и FLAG_ACTIVITY_MULTIPLE_TASK.

Если вы запустите это непосредственно из своего приложения, ваш диалог появится поверх последнего действия вашего приложения. Но если вы используете трансляцию PendingIntent AlarmManager для запуска "диалог", у вас есть время, чтобы переключиться на другое приложение, так что вы можете увидеть, что ваш "диалог" появится над этим другим приложением, Если стиль установлен соответствующим образом, чтобы показать, что за ним.

очевидно, что нужно нести ответственность за то, когда целесообразно отображать диалог поверх других приложений.

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);