Диалог Android Alert изнутри службы намерений

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

   AlertDialog alertDialog = new AlertDialog.Builder(this).create();

Это вызывает следующее исключение

   Unable to add window — token null is not for an application

Я также пробовал IntentService.this и getApplicationContext(). Между я не хочу делать это, используя активность. Я просто хочу показать простой диалог с небольшим текстом.

Ответ 1

Нужно Activity для отображения AlertDialog, потому что мы не можем отображать Dialog из любого Service

Решение.

Создайте Activity как тему диалога и запустите Activity из Service.

Просто нужно зарегистрировать вас Activity в menifest.xml, как показано ниже

android:theme="@android:style/Theme.Dialog"

или

android:theme="@android:style/Theme.Translucent.NoTitleBar"

MyDialog.java

public class MyDialog extends Activity {
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        final AlertDialog alertDialog = new AlertDialog.Builder(this).create();
        alertDialog.setTitle("your title");
        alertDialog.setMessage("your message");
        alertDialog.setIcon(R.drawable.icon);

        alertDialog.show();
    }
}

Ответ 2

Только если вы установите тип alertDialog на TYPE_SYSTEM_ALERT, он будет отображаться из службы намерения.

 AlertDialog alertDialog = new AlertDialog.Builder(this).create();

добавить их после кода:

alertDialog.getWindow().setType(WindowManager.LayoutParams.TYPE_SYSTEM_ALERT);
alertDialog.show();

Но у него есть стоимость:

<uses-permission android:name="android.permission.SYSTEM_ALERT_WINDOW" />

Ответ 3

Пожалуйста, посетите

https://github.com/selmantayyar/Custom-SMS-Popup

это поможет вам!

или что вы можете сделать, это зарегистрировать aActivity в menifest.xml следующим образом

android:theme="@android:style/Theme.Dialog"

или

android:theme="@android:style/Theme.Translucent.NoTitleBar"

и обойти его

Ответ 4

Проблема связана с Контекстом. Вы не можете использовать этот как Контекст в службе Intent. Поэтому необходимо передать переменную Context для вашей службы Intent в ваш диалоговом окне Alert. Как,

AlertDialog alertDialog = new AlertDialog.Builder(context).create();