Как отобразить диалог из службы

Я прочитал действительно много сообщений об этой теме, но ничто не работает для меня (или не имеет эффекта, который я желаю).

У меня есть приложение, которое после входа в систему запускает справочную службу (реализация класса Service). Эта служба синхронизирует себя с сервером, и если приходит новый заказ, он создает уведомление.

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

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

Я хочу отобразить диалоговое окно текущей активности, в результате чего фактический фон (текущая активность) исчезнет и отобразит диалог.

Как это возможно?

Спасибо, Filip

Ответ 1

Я высоко, высоко, ВЫ рекомендую вам НЕ делать этого (это противоречит идеям Android и рекомендациям пользовательского интерфейса). Уведомления - это предпочтительный способ выполнить то, что вы делаете (что звучит так, как будто вы уже достигли).

При этом, если вы это сделаете, я бы порекомендовал просто использовать тематическую деятельность Dialog. Таким образом, вам не нужно запускать отдельный диалог. Подробнее о том, как это сделать, см. http://developer.android.com/guide/topics/ui/themes.html#ApplyATheme.

Ответ 2

Мы можем отображать диалог из службы только в том случае, если это диалоговое окно системного предупреждения. Итак, установите для параметра TYPE_SYSTEM_ALERT параметр макета окна в диалоговом окне следующим образом:

dialog.getWindow().setType(WindowManager.LayoutParams.TYPE_SYSTEM_ALERT);

Но для этого требуется разрешение SYSTEM_ALERT_WINDOW. Поэтому не забудьте добавить этот permissin в файл манифеста.

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

Ответ 3

вы можете начать с изучения того, как создать активность, которая выглядит как диалог (без заголовка, прозрачного фона, "плавающего" эффекта и т.д.). и нет, вы не можете просто начать диалог без активности

Ответ 4

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

Ответ 5

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