如何在service中彈出dialog

我們都知道service是沒有界面的,默默的在後臺執行邏輯代碼,有時候需要和前臺有所交互,如:toast或彈出提示框等等

在service中彈出toast很簡單,只要使用handler就可搞定,代碼如下

1
2
3
4
5
6
hanlder.post(new Runnable() {
    @Override
    public void run() {
        Toast.makeText(DialogService.this, "啓動服務", 1).show();
     }
    });

而在service中彈出dialog時,如果寫和activity同樣的代碼時會報錯
s.jpg
因爲這個dialog的顯示是需要依附於一個activity,如果需要在servcie中顯示需要把dialog設置成一個系統的dialog,即全局性質的提示框,所以只要手機處於開機狀態,無論它現在處於何種界面之下,只要調用alter.show(),就會彈出提示框來。需要在show() 調用之前添加以下代碼:

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

注意:使用系統的Dialog需要在清單文件中添加權限,否則不會顯示出來
android.permission.SYSTEM_ALERT_WINDOW

全部代碼

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
Builder builder = new AlertDialog.Builder(this);
    builder.setTitle("提示");
    builder.setMessage("該下車了");
    builder.setNegativeButton("取消", new OnClickListener() {
        @Override
        public void onClick(DialogInterface dialog, int which) {

        }
    });
    builder.setPositiveButton("確定", new OnClickListener() {
        @Override
        public void onClick(DialogInterface dialog, int which) {

        }
    });
    final AlertDialog dialog = builder.create();
    **//在dialog  show方法之前添加如下代碼,表示該dialog是一個系統的dialog**
    dialog.getWindow().setType((WindowManager.LayoutParams.TYPE_SYSTEM_ALERT));
    new Thread(){
        public void run() {
            SystemClock.sleep(4000);
            hanlder.post(new Runnable() {
                @Override
                public void run() {
                    dialog.show();
                }
            });
            };
    }.start();
}

聲明:eoe文章著作權屬於作者,受法律保護,轉載時請務必以超鏈接形式附帶如下信息

原文作者: 皇馬船長

原文地址: http://my.eoe.cn/cainiao1/archive/2345.html

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章