Welcome to MLink Developer Q&A Community for programmer and developer-Open, Learning and Share
Welcome To Ask or Share your Answers For Others

Categories

0 votes
374 views
in Technique[技术] by (71.8m points)

如何在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();
//            }
//        });
    }

与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
Welcome To Ask or Share your Answers For Others

1 Answer

0 votes
by (71.8m points)
间接方式能解决一切直接方式不能解决的问题

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

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


与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
Welcome to MLink Developer Q&A Community for programmer and developer-Open, Learning and Share
...