Диалог 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();