在service中,进行AlertDialog调用,如
void showDialog() {
AlertDialog.Builder builder = new AlertDialog.Builder(this, R.style.Theme_MyApplication);
builder.setTitle("Test");
builder.setMessage("hello, ");
builder.setNegativeButton("cancel1", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialogInterface, int i) {
dialogInterface.dismiss();
}
});
AlertDialog dialog = builder.create();
//加上这个setType和赋权悬浮窗口后,就没有问题了,这里注释掉,展现出问题
// dialog.getWindow().setType(WindowManager.LayoutParams.TYPE_APPLICATION_OVERLAY);
dialog.show();
}
会导致crash,
Caused by: android.view.WindowManager$BadTokenException: Unable to add window -- token null is not val

在AndroidService中直接调用AlertDialog可能会导致WindowManager$BadTokenException,因为Service没有Activity的上下文。通过设置dialog.getWindow().setType(WindowManager.LayoutParams.TYPE_APPLICATION_OVERLAY)可以解决问题,但这需要相应的权限。文章解释了WindowManager、ViewRootImpl在绘制机制中的角色,并提供了异常的原因和解决方案。
最低0.47元/天 解锁文章
411

被折叠的 条评论
为什么被折叠?



