2011-10-27 79 views
36

我已經閱讀了很多關於此主題的文章,但是沒有任何文章適用於我(或者沒有我希望的效果)。如何從服務中顯示對話框

我有一個應用程序,登錄後啓動後臺服務(服務類的實現)。該服務將自身與服務器同步,如果有新訂單來創建通知。

到目前爲止,一切都很好,我有通知和Toast消息。但是,我想要一個對話框,通知用戶有關新訂單。

據我所知,您可以從顯示對話框的服務中啓動一項活動。這可以工作,但活動從當前活動堆棧的頂部開始並顯示對話框。我有一個沒有附加視圖的活動,但它正確地顯示對話框,但在黑色背景上。

我想要的是在當前活動上顯示對話框,導致實際背景(運行活動)淡入淡出並顯示對話框。

這是不是有可能?

謝謝你,菲利普

+0

[從Android的服務警報對話框(http://stackoverflow.com/questions/3599563/alert-dialog-from-android-service) – araks

回答

35

我高度重視,強烈建議您不要這樣做(這違背了Android設計和UI準則)。通知是實現你正在做的事情的首選方式(聽起來好像你已經完成了)。

這就是說,如果你必須這樣做,我會建議只使用對話主題活動。這樣你就不必啓動一個單獨的對話框。請參閱http://developer.android.com/guide/topics/ui/themes.html#ApplyATheme瞭解如何操作。

+0

的可能的複製這是我迄今所做的。它實際上是如何,例如如何顯示呼叫通知?無論你是什麼活動,如果有人打電話給你,如果你想接受電話,你會得到一個對話。這也只是一個DialogTheme的活動嗎? (對不起,我懶得在源代碼中查看:) –

+1

我不知道這是如何處理的。歡迎您提出另一個SO問題,但如果我的答案解決了您的問題,請務必單擊我的解決方案旁邊的複選框以接受它。 –

+0

但是在技術上可以從服務上自行顯示AlertDialog嗎? –

0

不,你不能劫持的活動,不是「你」,並命令它顯示對話框。 你開始自己的活動的方法是經典之作。

1

您無法顯示對話框。但是,您可以通過誇大自定義視圖的方式,以便在滿足特定條件時在屏幕上顯示對話框。

5

您可以從學習如何創建看起來像對話框的活動(無標題欄,透明背景,「浮動」效果等) 和no,您不能僅僅在沒有活動

+10

不要自大,我們不會像你一樣好...... – Jmorvan

98

只有在系統警報對話框中,我們才能顯示來自服務的對話框。因此,設置TYPE_SYSTEM_ALERT窗口布局參數對話框,如下所示:

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

但是,它需要SYSTEM_ALERT_WINDOW許可。所以,不要忘記在Manifest文件中添加這個許可。

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

謝謝,它解決了我的問題。 –

+0

@chakrapani這工作就像一個魅力,但請如何解僱它?請參閱我的問題[http://stackoverflow.com/questions/21913249/unable-to-dismiss-alertdialog](http://stackoverflow.com/questions/21913249/unable-to-dismiss-alertdialog) –

+0

你很可愛,這應該是被接受的答案 –