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);
```

将对话框设置为了系统级别,这样就不会弹出上面的错误提示.

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值