项目中需要在网络断开连接时设置全局弹出框提醒,要求当网络断开的时候,在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不消失,因此需要版本判断,问题详情见以下链接: