Як відобразити діалог зі служби

Я читав дуже багато публікацій з цієї теми, але нічого не працює для мене (або не має бажаного ефекту).

У мене є програма, яка після входу в систему запускає фонову Сервіс (реалізація класу Сервісу). Ця служба синхронізується з Сервером, і якщо з'являється новий замовлення, він створює сповіщення.

Поки що все працює чудово, у мене є повідомлення та Тост повідомлення. Однак я хотів би мати діалогове вікно, яке повідомляє користувача про новий замовлення.

Як я зрозумів, ви можете почати активність в межах служби, яка відображає діалогове вікно. Це працює, але активність починається на вершині поточного стеку діяльності та відображає діалогове вікно. У мене є активність без додавання перегляду і вона правильно відображає діалогове вікно, однак, на чорному тлі.

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

Чи це якось можливе?

Дякую, Філіпп

42
Можливий дубльований діалог сповіщення з сервісу Android
додано Автор araks, джерело

5 Відповіді

Ми можемо показувати діалог із сервісу лише в тому випадку, якщо це діалогове вікно сповіщення системи. Таким чином, встановіть параметр макета вікна TYPE_SYSTEM_ALERT у діалоговому вікні наступним чином:

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

Але для цього потрібен дозвіл SYSTEM_ALERT_WINDOW. Отже, не забувайте додавати цей permissin в файл маніфесту.


104
додано
@chakrapani це працювало як чарівність, але будь ласка, як я його відпустити ??? Будь ласка, перегляньте моє запитання http://stackoverflow.com/questions/21913249/unable-to-dismis‌ s -alertdialog
додано Автор Lisa Anne, джерело
ти чарівна, це повинно бути прийнятою відповіддю
додано Автор Muhammed Refaat, джерело
Спасибі, Він вирішив мою проблему.
додано Автор mh taqia, джерело
Це не повинно стати прийнятою відповіддю. Діалоги для сповіщень призначені тільки для сповіщень! Це буде насамперед усе, навіть, наприклад, через телефонні дзвінки та діалогове вікно зміни стану акумулятора. Знайте, що ви робите, якщо ви використовуєте параметр system_alert.
додано Автор JacksOnF1re, джерело
Гаразд, не давайте сперечатися про це більше. Якщо ти знаєш, що ти робиш, то все добре. Можливо, цього бічного ноту було б достатньо, і моя реакція була трохи суворою.
додано Автор JacksOnF1re, джерело
@deej Я не хочу давати відповідь. Але я не міг пояснити, чому це погана практика, і чому це не повинно бути відповіддю . І це тільки варто коментувати.
додано Автор JacksOnF1re, джерело
@deej Ви хочете поганих програмістів? Адже саме так ви отримуєте поганих програмістів. "Нічого не важливо" - це таке ставлення, чому StackOverflow отримує все більше й більше прикладів копії та вставлення коду. Сумно але правда.
додано Автор JacksOnF1re, джерело
Той факт, що він потребує дозволу, який звичайно не можна отримати, повинен зробити досить гарну роботу з захисту від нецільового використання. Є законне використання цього.
додано Автор Chris Stratton, джерело
@ JacksOnF1re THIS ПОВИННА бути прийнятою відповіддю, оскільки вона відповідає на питання. Ніщо інше не має значення
додано Автор deej, джерело
@ JacksOnF1re не може погодитися. Ніхто не обмежує вас поясненням, чому щось погано, але це дійсно має бути сторонньою заміткою. Потім дайте відповідь на це питання, пояснивши, що це погана практика, тому що це і те, і бла-бла. Поточна відповідь дає обхідний шлях, хоча. І це ще краще, тому що додаткових дозволів не потрібно. Навіть так, я вважаю, що краще спочатку відповісти на питання.
додано Автор deej, джерело
Так, але стиль кнопки діалогу змінився!
додано Автор zionpi, джерело
Давайте поставимося серйозно: це правильна відповідь :-) Thanx!
додано Автор Yoraco Gonzales, джерело
@ JacksOnF1re іноді вам потрібно насправді відображати попередження на вершині всього ... як критичний сигнал .. якщо додаток, який ви розробляєте, є одним з послуг низького рівня пам'яті монітора, і ви дійсно хочете попередження, коли пам'ять низька, що ви робите .. тоді це добре, імо
додано Автор yeahman, джерело
як зазначив Кріс Страттон ... дозволу є з причини ..
додано Автор yeahman, джерело
Спасибі дуже багато для мене
додано Автор Aayushi, джерело
TYPE_SYSTEM_ALERT Ця константа була застарілою в API-рівні 26. для несистемних додатків. Замість цього використовуйте TYPE_APPLICATION_OVERLAY .
додано Автор Shady Boshra, джерело

Я дуже, високо, дуже рекомендую НЕ робити це (це відповідає принципам дизайну Android та інтерфейсу Android). Сповіщення - це найкращий спосіб досягти того, що ви робите (це звучить так, ніби ви вже це зробили).

Якщо сказати, якщо ви це маєте робити, я б рекомендував просто використовувати тему тематичного діалогу. Таким чином, вам не потрібно створювати окреме діалогове вікно. Див. Розділ http://developer.android.com/guide/topics/ui/themes.html# ApplyAtheme , як це зробити.

40
додано
Це те, що я зробив до цих пір. Насправді це так, як, наприклад, відображається сповіщення про виклик? Якою б діями ви не були, якщо хтось дзвонить вам, ви отримаєте діалогове вікно, якщо хочете прийняти виклик чи ні. Чи це також просто діяльність з DialogTheme? (Вибачте, я лінувався, щоб подивитися це в джерелах :)
додано Автор Filip Majernik, джерело
це насправді не відповідає на питання.
додано Автор Vladyslav Matviienko, джерело
Відповідь: Не робіть цього. Якщо ви збираєтеся це зробити, розпочніть тематичну діяльність, щоб вона виглядала як діалогове вікно. Не намагайтеся підключити клас діалогу до сервісу, оскільки його приречені на провал.
додано Автор Justin Breitfeller, джерело
Початок роботи через натискання кнопки в повідомленні - це добре. Але це також не так, як показати діалог із сервісу.
додано Автор Justin Breitfeller, джерело
Я не знаю, як це обробляється. Вам більше ніж можна запросити інше запитання, але якщо моя відповідь вирішить вашу проблему, обов'язково натисніть прапорець біля мого рішення, щоб прийняти його.
додано Автор Justin Breitfeller, джерело
Для цього використовується випадок: у мене є сповіщення з діями на нього. Зазвичай, коли користувач вибирає дію, він виконується у фоновому режимі у службі. Однак іноді треба відображати діалогове вікно попередження.
додано Автор Mark Gjøl, джерело
Діалог у новій активності викликає виклик onPause() для поточної активності, і якщо noHistory = true для цієї діяльності, ця активність буде знищена. Це може бути не те, що ви хочете. Але тоді знову це можливо. Просто слід пам'ятати про таку поведінку.
додано Автор JohnyTex, джерело
Але з чим технічно можливо індивідуально відображати AlertDialog з сервісу?
додано Автор Rahul Sundar, джерело

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

4
додано
не будь гадким, ми не всі так добре, як ти ...
додано Автор Jmorvan, джерело

Ви не можете показати діалогове вікно. Але ви можете піти на аллернативний спосіб, наповнивши свій індивідуальний перегляд, щоб ви могли відображати діалогове вікно на екрані, якщо виконуються певні умови.

1
додано

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

0
додано
android_jobs_ua
android_jobs_ua
120 учасників

Публикуем вакансии и запросы на поиск работы по направлению Android. Здесь всё: full-time, part-time, remote и разовые подработки.

Mobile Dev Jobs UA
Mobile Dev Jobs UA
20 учасників

Публикуем вакансии и запросы на поиск работы по направлению iOS, Android, Xamarin, RN и т.д.