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"
чтобы всплывающее окно не появлялось в последних задачах (долгое нажатие дома)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);