如何在Application内弹出Dialog,这样写不行,说是上下文需要依赖Activity

错误日志:android.view.WindowManager$BadTokenException: Unable to add window android.view.ViewRootImpl$W@b056a31 -- permission denied for window type 2038

    private void showDialog() {
        AlertDialog.Builder builder = new AlertDialog.Builder(getApplicationContext());
        View view = View.inflate(getApplicationContext(), R.layout.dialog_enterprise_certificate_status, null);
        builder.setView(view);
        final AlertDialog dialog = builder.create();
        //设置弹出全局对话框,但是这句话并不能解决在android的其他手机上能弹出来(例如用户华为p10 就无法弹框)
        // dialog.getWindow().setType(WindowManager.LayoutParams.TYPE_TOAST);
        //只有这样才能弹框
        if (Build.VERSION.SDK_INT >= 26) {//8.0新特性
            dialog.getWindow().setType(WindowManager.LayoutParams.TYPE_APPLICATION_OVERLAY);
        } else {
            dialog.getWindow().setType(WindowManager.LayoutParams.TYPE_SYSTEM_ALERT);
        }

        dialog.show();
//        view.findViewById(R.id.tv_certificate_notice_confirm).setOnClickListener(new View.OnClickListener() {
//            @Override
//            public void onClick(View v) {
//                dialog.dismiss();
//            }
//        });
    }
阅读 6.7k
1 个回答
间接方式能解决一切直接方式不能解决的问题

单独写一个Activity,可以把theme设置为Dialog,也可以使用默认的theme,然后弹出一个Dialog

另外需要注意的是,新版本的系统是不允许后台启动Activity,所以在操作时,需要特别注意下。

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题
宣传栏