小米手机server内部调用alertdialog不显示问题

首先自己创建一个方法

 

AlertDialog.Builder builder = new AlertDialog.Builder(this);
        builder.setTitle("您的账号被其他人登录").setMessage("需要对您强制下线,请确认您的账号安全")
                .setPositiveButton("修改密码", new DialogInterface.OnClickListener() {
                    @Override
                    public void onClick(DialogInterface dialog, int which) {
                        Intent intent=new Intent(PollingService.this, ChangepasswordActivity.class);
                        intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
                        startActivity(intent);
                    }
                }).setNegativeButton("重新登录", new DialogInterface.OnClickListener() {
            @Override
            public void onClick(DialogInterface dialog, int which) {
                Intent intent=new Intent(PollingService.this, LoginActivity.class);
                intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
                startActivity(intent);
            }
        });
        AlertDialog ad = builder.create();
// ad.getWindow().setType(WindowManager.LayoutParams.TYPE_SYSTEM_DIALOG); //系统中关机对话框就是这个属性
        ad.getWindow().setType(WindowManager.LayoutParams.TYPE_SYSTEM_ALERT);
        ad.setCanceledOnTouchOutside(false); //点击外面区域不会让dialog消失
        ad.show();
 

这里我的功能是什么显而易见了,前面的功能是轮询自己的账号异地登录,当轮询到自己的账号被其他人登录时,打开一个dialog,这里就有问题了,小米的真坑

接下来在清单文件加入权限

 

然而这个权限对于小米来说并没有什么鸟用,接下来运行,你会发现,除了小米,剩下的手机都是能显示这个dialog的,唯独小米不行,那么,接下来这里需要用户手动开启当前app的悬浮窗权限,因为小米默认是关闭的,需要设置-其他应用管理-找到你的app-最下面的权限管理-显示悬浮窗,打开之后即可弹出AlertDialog

这是一个头疼的问题,要不然想办法引导用户就手动开启,要不然就干脆不用alertdialog,用一个透明的activity代替alert来弹出,然后实现应有的功能也是个不错的选择

你可能感兴趣的:(小米的坑)