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

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

更多相关文章

  1. 用Java 在 KSOAP中序列化复杂对象数组实体
  2. android activity以对话框形式显示
  3. Android——系统提示对话框(AlertDialog)
  4. android 之Dialog的多种Dialog对话框(以及反射在自定义对话框的
  5. Android对象序列化存储

随机推荐

  1. 用javascript怎么取到当前月第一天、最后
  2. 剑指Offer(六)旋转数组的最小数字(Java版 )
  3. 数据结构学习----线性表(Java版的实现)
  4. Ubuntu 中 java 环境 (sunjdk) 的配置 (
  5. 为什么gradle不会覆盖不同Android风格的J
  6. 最近一个月的面试记录总结
  7. java_easyui体系之更换主题
  8. Zookeeper官网文档—第三章 2.Zookeeper
  9. Java Mail发送邮件
  10. php 调用java 接口