Android:Dialog 遇到的问题
16lz
2021-01-23
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);
```
将对话框设置为了系统级别,这样就不会弹出上面的错误提示.
更多相关文章
- 用Java 在 KSOAP中序列化复杂对象数组实体
- android activity以对话框形式显示
- Android——系统提示对话框(AlertDialog)
- android 之Dialog的多种Dialog对话框(以及反射在自定义对话框的
- Android对象序列化存储