1. 程式人生 > >Android Dialog 遇到的問題

Android Dialog 遇到的問題

Dialog的生成,一般是基於Activity的這個物件,如程式碼:

 private void showDialog(){
        dialog = new AlertDialog.Builder(this);
        dialog.setTitle("Test")
                .setMessage("Test will show")
                 .create().show();

 }

但是,有些情況很特殊。比如在Service中,需要彈出彈出對話方塊。此時,如果依然按照基於Activity物件的方式建立,那麼在彈出對話方塊時,將會報:

```  AndroidRuntime: android.view.WindowManager$BadTokenException:          Unable to add window -- token null is not for an application ```

也就是說:對話方塊沒有可以依附的Activity物件。所以不能基於Service物件來建立對話方塊。當然,可以使對話方塊基於全域性。

    private void shutdownDialog(){
        if (sConfirmDialog != null){
        sConfirmDialog.dismiss();    
    }
    
    sConfirmDialog = new AlertDialog.Builder(this/*mContext*/)
             .setTitle("Power off")
             .setMessage("Your phone will shutdown")
             .setPositiveButton("yes", new DialogInterface.OnClickListener() {
                 public void onClick(DialogInterface dialog, int which) {
                 }    
             })
             .setNegativeButton("no", null)
             .create();
    //sConfirmDialog.getWindow().setType(WindowManager.LayoutParams.TYPE_SYSTEM_ALERT);
        sConfirmDialog.getWindow().setType(LayoutParams.TYPE_SYSTEM_ERROR);
        sConfirmDialog.show();
   }

即在 ==show()== 之前,加上

``` sConfirmDialog.getWindow().setType(LayoutParams.xxxxxxx); ```

將對話方塊設定為了系統級別,這樣就不會彈出上面的錯誤提示.