android service中显示一个dialog
轉(zhuǎn)自:http://blog.csdn.net/huxueyan521/article/details/8954844
dialog是依附于activity存在的。但是app中經(jīng)常需要使用以下的情況,在service中做一些后臺(tái)操作,在某個(gè)臨界條件滿足時(shí),顯示一個(gè)dialog告知用戶。
這時(shí)dialog無(wú)法直接從service中啟動(dòng)起來(lái),會(huì)報(bào)出android.view.WindowManager$BadTokenException:Unable to add window的錯(cuò)誤。
解決方法有兩種:
1. 顯示一個(gè)系統(tǒng)界別的dialog,即全局性質(zhì)的dialog。這種dialog在任何界面下都可以彈出來(lái)。但是,這種dialog不相應(yīng)home鍵和返回鍵,即強(qiáng)制用戶必須對(duì)dialog作出操作后。
使用方法是在dialog.show()語(yǔ)句之前設(shè)置dialog的window的type是system alert型。如下:
[java]?view plaincopyprint?
還需要在AndroidManifest.xml中增加權(quán)限:
[html]?view plaincopyprint?
2. 在dialog的背后加一個(gè)透明的activity。即先顯示一個(gè)透明的activity,在使用activity的context顯示dialog。需要注意的是,activity在destroy的時(shí)候一定要把dialog給dismiss掉,否則activity消失但dialog還在,會(huì)crash。
透明activity的創(chuàng)建方法是在AndroidManifest.xml中添加theme:
[html]?view plaincopyprint?
[java]?view plaincopyprint?
總結(jié)
以上是生活随笔為你收集整理的android service中显示一个dialog的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: Android AsyncTask两种线
- 下一篇: android 一个很漂亮的控件Obse