我们在使用一个普通的Dialog的时候,一开始可能都遇到过这样的错误。
android.view.WindowManager$BadTokenException: Unable to add window – token null is not for
an application。
这个错误消息就是因为没有应用token导致的,而应用的token一般只有Activity有,所以这里我们只需要用
Activity作为Context来显示Dialog。
错误的代码:
Dialog dialog = new Dialog(getApplication());
Dialog dialog = new Dialog(getApplicationContext());
正确的代码:
Dialog dialog = new Dialog(MainActivty.this);
这是一种解决方法。但是还有一种方法。
Dialog本身是一个子Window,可以设置为系统Window,因为系统Window比较特别,可以不需要
token。
dialog.getWindow().setType(WindowManager.LayoutParams.TYPE_SYSTEM_OVERLAY);
注意添加使用系统Window的使用权限。因为系统类型的Window是需要检查权限的。
uses-permission android:name=”android.permission.SYSTEM_ALERT_WINDOW”/>