Як адлюстраваць дыялог са службы

Я прачытаў вельмі шмат паведамленняў аб гэтай тэме, аднак нічога не працуе для мяне (ці не мае эфекту я жадаю).

У мяне ёсць дадатак, што пасля ўваходу ў сістэму пачынае фонавую службу (рэалізацыя класа абслугоўвання). Гэтая служба сінхранізуе сябе з серверам, і калі прыходзіць новы заказ, ён стварае апавяшчэнне.

Да гэтага часу, усё выдатна працуе, у мяне ёсць апавяшчэнне і паведамленне Toast. Тым не менш, я хацеў бы мець дыялог, які паведамляе карыстальніка аб новым парадку.

Як я зразумеў, вы можаце пачаць дзейнасць унутры службы, якая адлюстроўвае дыялогавае акно. Гэта працуе, але дзейнасць пачынаецца на вяршыні бягучага стэка дзейнасці і адлюстроўвае дыялогавае акно. У мяне ёсць занятак без гледжання далучанай і правільна адлюстроўвае дыялогавае акно, аднак, на чорным фоне.

Тое, што я хачу, каб адлюстраваць дыялог аб бягучай дзейнасці, у выніку чаго фактычны фон (бег актыўнасці), каб звяць і адлюстраваць дыялогавае акно.

Ці з'яўляецца гэта неяк можна?

Дзякуй, Filip

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 Я не хачу, каб даць адказ. Але я быў ablte, каб растлумачыць, чаму гэта дрэнная практыка, і чаму яна не павінна быць <�правільна> адказу. І гэта толькі варта каментар.
дададзена аўтар JacksOnF1re, крыніца
@deej Хочаце дрэнныя праграмісты? Таму што, як вы атрымаеце дрэнныя праграмісты. «Nothing Else Matters» - гэта стаўленне, чаму StackOverflow становіцца ўсё больш і больш прыклад сайта капіяваць і ўстаўляць-код. Сумна, але праўда.
дададзена аўтар JacksOnF1re, крыніца
Справа ў тым, што яна патрабуе дазволаў, якія звычайна не могуць быць атрыманы, павінны зрабіць даволі добрую працу па абароне ад неправамернага выкарыстання. Ёсць законнае выкарыстанне гэтага.
дададзена аўтар Chris Stratton, крыніца
@ JacksOnF1re гэта павінна быць прынята адказваць, як ён адказвае на пытанне. Нішто іншае не мае значэння
дададзена аўтар deej, крыніца
@ JacksOnF1re не могуць прыйсці да згоды. Ніхто не абмяжоўвае вас ад тлумачэння, чаму-то гэта дрэнна, але гэта сапраўды павінна быць нататка боку. Адказ на пытанне, а затым растлумачыць, што гэта дрэнная практыка, таму што гэта і тое, і бла-бла. Бягучы адказ забяспечвае абыходны шлях, хоць. А яшчэ лепш, бо не патрабуюцца ніякія дадатковыя дазволы. Тым не менш, я лічу, што лепш спачатку адказаць на пытанне.
дададзена аўтар deej, крыніца
Так, але стыль кнопкі дыялог таксама змяніўся!
дададзена аўтар zionpi, крыніца
Давайце сур'ёзна: гэта правільны адказ :-) Thanx!
дададзена аўтар Yoraco Gonzales, крыніца
@ JacksOnF1re часам вам трэба на самой справе адлюстроўваць папярэджанне на вяршыні ўсіх ... як крытычны папярэджанне .. калі дадатак вы распрацоўваеце з'яўляецца somekind службы нізкага манітора памяці, і вы сапраўды хочаце, папярэджанне пры недахопе памяці, што вы робіце .. то гэта выдатна имо
дададзена аўтар yeahman, крыніца
як Крыс Stratton адзначыў ... дазвол ёсць па прычыне ..
дададзена аўтар yeahman, крыніца
Дзякуй шмат працаваў для мяне
дададзена аўтар Aayushi, крыніца
<�Код> TYPE_SYSTEM_ALERT Гэтая канстанта была састарэлай ва ўзроўні API 26. для ня сістэмных прыкладанняў. Выкарыстоўвайце TYPE_APPLICATION_OVERLAY замест гэтага.
дададзена аўтар Shady Boshra, крыніца

Я вельмі, вельмі, вельмі рэкамендую, што вы не зробіце гэта (гэта ідзе насуперак з Android дызайн і прынцыпы карыстацкага інтэрфейсу). Апавяшчэнні з'яўляюцца пераважным спосабам зрабіць тое, што вы робіце (што гэта гучыць так, як быццам вы ўжо зрабілі).

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

40
дададзена
Гэта тое, што я зрабіў да гэтага часу. Ці з'яўляецца гэта на самай справе так, як, напрыклад, адлюстроўваецца выклік апавяшчэнняў? Які б дзейнасцю вы, калі хтосьці тэлефануе, вы атрымаеце дыялогавае акно, калі вы хочаце прыняць выклік ці не. Гэта таксама проста дзейнасць з DialogTheme? (На жаль, я лянівы, каб паглядзець, што ў крыніцах :)
дададзена аўтар Filip Majernik, крыніца
гэта на самай справе не дае адказу на пытанне.
дададзена аўтар Vladyslav Matviienko, крыніца
Адказ: Не рабіце гэтага. Калі вы збіраецеся зрабіць гэта, пачаць дзейнасць, якая тэматычна выглядаць як дыялог. Не спрабуй абутку ражок дыялогавага класа ў службу, як яго асуджаная на правал.
дададзена аўтар Justin Breitfeller, крыніца
Пачынаючы дзейнасць з-за націскам кнопкі ў паведамленні ў парадку. Але гэта таксама не тое ж самае, як паказвае дыялог ад службы.
дададзена аўтар Justin Breitfeller, крыніца
Я не ўпэўнены, як гэта апрацоўваецца. Вы больш, чым можаце задаць іншае пытанне SO, але калі мой адказ вырашыць вашу праблему, калі ласка, пераканайцеся, што сцяжок побач з маім рашэннем, каб прыняць яго.
дададзена аўтар Justin Breitfeller, крыніца
Прэцэдэнт для гэтага: у мяне ёсць апавяшчэнне з дзеяннем на яго. Звычайна, калі карыстальнік выбірае дзеянне яна выконваецца ў фонавым рэжыме ў якасці службы. Аднак часам папярэджанне дыялог павінен быць паказаны.
дададзена аўтар Mark Gjøl, крыніца
Дыялог у новай дзейнасці выклікае OnPause() будзе называцца для бягучай дзейнасці адлюстроўваецца, і калі noHistory = TRUE для гэтай дзейнасці, гэтая дзейнасць будзе знішчана. Гэта можа быць не тое, што вы хочаце. Але зноў жа, гэта магло б. Проста трэба ведаць, што паводзіны.
дададзена аўтар JohnyTex, крыніца
Але гэта тэхнічна магчыма адлюстраваць AlertDialog ад сэрвісу самі па сабе?
дададзена аўтар Rahul Sundar, крыніца

Вы можаце пачаць навучанне аб тым, як стварыць дзеянне, якое выглядае як дыялог (без загалоўка, празрысты фон, «плавае» эфект, і г.д.) і няма, вы не можаце проста пачаць дыялог без activty

4
дададзена
ня быць дзёрзкім, мы не ўсё так добра, як вы ...
дададзена аўтар Jmorvan, крыніца

Вы не можаце паказаць дыялог. Але вы можаце пайсці alernative шляху раздзімаючы наладжаную пункт гледжання, так што вы можаце паказаць дыялог на экране whenver пэўных умоў.

1
дададзена

Не, вы не можаце сагнаць дзейнасць, якая не «твой» і загадваю, каб паказаць дыялогавае акно. Ваш падыход пачаць свае ўласныя дзейнасці з'яўляецца класічным.

0
дададзена