Подтвердить что ты не робот

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

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

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

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

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

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

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

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

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

4b9b3361

Ответ 1

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

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

Ответ 2

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

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

Если вы запустите это прямо из своего приложения, ваше диалоговое окно появится поверх вашего последнего действия приложения. Но если вы используете PendingIntent broadcast от 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);