Android 弹出全局dialog

项目中需要在网络断开连接时设置全局弹出框提醒,要求当网络断开的时候,在app内的任一页面均能弹出提示框提示用户网络断开,开始认为dialog需要依附在Activity上,后经查询可采取悬浮窗的模式,使其不必依附于Activity,可在任一页面弹出,代码如下:

  AlertDialog.Builder builder = new AlertDialog.Builder(getApplicationContext());
                    AlertDialog dialog=builder.setMessage("pc端断开连接,请及时保存编辑文档!")
                            .setPositiveButton("确定",new DialogInterface.OnClickListener(){
                                @Override
                                public void onClick(DialogInterface dialogInterface, int i) {
                                }
                            }).create();
                    dialog.getWindow().setType(WindowManager.LayoutParams.TYPE_SYSTEM_ALERT);
                    dialog.setCanceledOnTouchOutside(false);//点击屏幕不消失
                    if (!dialog.isShowing()){//此时提示框未显示
                        dialog.show();
                    }
需添加 dialog.getWindow().setType(WindowManager.LayoutParams.TYPE_SYSTEM_ALERT);设置dialog的类型,同时要在清单文件中配置:
<uses-permission android:name="android.permission.SYSTEM_ALERT_WINDOW" />
添加该权限,若仍无法显示要到手机设置页面的,应用管理,找到自己的应用打开悬浮窗权限,若还是不行,可点击以下链接,寻找解决方法:

https://www.zhihu.com/question/37849134

参考其他需要悬浮窗权限的app,都是默认不开启(测试机魅蓝note3),这就导致需要提醒用户设置,网上查阅资料,判断该权限是否开启,需要适配多种机型,极为不便,后经查询,可将dialog.getWindow().setType(WindowManager.LayoutParams.TYPE_SYSTEM_ALERT);改为dialog.getWindow().setType(WindowManager.LayoutParams.TYPE_TOAST);,此时不需要悬浮窗权限开启,该全局提示框亦可弹出。

---------------------------分割线-------------------------------------------------------

使用dialog.getWindow().setType(WindowManager.LayoutParams.TYPE_TOAST);会遇到版本问题,在Android 4.4以下,TYPE_TOAST虽不需要权限亦可弹出,但是取消了界面交互功能,无法获取触摸事件,造成主动点击按钮,dialog不消失,因此需要版本判断,问题详情见以下链接:

http://www.jianshu.com/p/634cd056b90c



猜你喜欢

转载自blog.csdn.net/androidforwell/article/details/54345495