Android 彈出全域性dialog
阿新 • • 發佈:2019-01-26
專案中需要在網路斷開連線時設定全域性彈出框提醒,要求當網路斷開的時候,在app內的任一頁面均能彈出提示框提示使用者網路斷開,開始認為dialog需要依附在Activity上,後經查詢可採取懸浮窗的模式,使其不必依附於Activity,可在任一頁面彈出,程式碼如下:
需新增dialog.getWindow().setType(WindowManager.LayoutParams.TYPE_SYSTEM_ALERT);設定dialog的型別,同時要在清單檔案中配置: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(); }
<uses-permission android:name="android.permission.SYSTEM_ALERT_WINDOW" />
新增該許可權,若仍無法顯示要到手機設定頁面的,應用管理,找到自己的應用開啟懸浮窗許可權,若還是不行,可點選以下連結,尋找解決方法:
參考其他需要懸浮窗許可權的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不消失,因此需要版本判斷,問題詳情見以下連結: