Как отобразить диалог из службы - PullRequest
48 голосов
/ 27 октября 2011

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

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

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

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

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

Возможно ли это как-то?

Спасибо, Филипп

Ответы [ 5 ]

112 голосов
/ 09 октября 2013

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

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

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

<uses-permission android:name="android.permission.SYSTEM_ALERT_WINDOW"/>
44 голосов
/ 27 октября 2011

Я очень, НАСТОЯТЕЛЬНО, НАСТОЯТЕЛЬНО рекомендую НЕ делать этого (это противоречит принципам дизайна Android и UI). Уведомления являются предпочтительным способом выполнения того, что вы делаете (что звучит так, как будто вы уже выполнили).

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

4 голосов
/ 27 октября 2011

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

1 голос
/ 27 октября 2011

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

0 голосов
/ 27 октября 2011

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

...