天天看點

android service Dialog 彈出框

android service Dialog 彈出框

  相信大家第一次在Service中實作 AlertDialog 彈出框時,都會遇到應用閃退然後報出這個異常:

Caused by: android.view.WindowManager$BadTokenException:

  下面說下為什麼出現這個異常,原因很簡單,是由于 AlertDialog 的顯示是依賴于一個确定的Activity類,是以要想在 Service 中實作彈出來,需要做如下配置:

1、安裝正常寫好 AlertDialog 功能塊後,在alertObj .show()語句前加入:

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

  例如:

  private void showHostOnlineAlert(){
        final AlertDialog dialog =new AlertDialog.Builder(BackgroudService.this).create();
        dialog.setCanceledOnTouchOutside(false);
        dialog.requestWindowFeature(Window.FEATURE_NO_TITLE);
        dialog.getWindow().setBackgroundDrawable(new ColorDrawable(Color.TRANSPARENT));//set background was transparent
        dialog.getWindow().setType(WindowManager.LayoutParams.TYPE_SYSTEM_ALERT);//需要添加的語句
        dialog.show();
    }      

2、在AndroidManifest.xml中加入權限:

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

總結:以上做法就是聲明我們要彈出的這個提示框是一個系統的提示框,即全局性質的提示框,是以隻要手機處于開機狀态,無論它現在處于何種界面之下,隻要調用alterObj.show(),就會彈出提示框來。