android service Dialog 彈出框


android service Dialog 彈出框

  相信大家第一次在Service中實現 AlertDialog 彈出框時,都會遇到應用閃退然后報出這個異常:

Caused by: android.view.WindowManager$BadTokenException:

  下面說下為什么出現這個異常,原因很簡單,是由於 AlertDialog 的顯示是依賴於一個確定的Activity,所以要想在 Service 中實現彈出來,需要做如下配置:

1、安裝常規寫好 AlertDialog 功能塊后,在alertObj .show()語句前加入:

  alertObj.getWindow().setType(WindowManager.LayoutParams.TYPE_SYSTEM_ALERT);

  例如:

  private void showHostOnlineAlert(){
        final AlertDialog dialog =new AlertDialog.Builder(BackgroudService.this).create();
        dialog.setCanceledOnTouchOutside(false);
        dialog.requestWindowFeature(Window.FEATURE_NO_TITLE);
        dialog.getWindow().setBackgroundDrawable(new ColorDrawable(Color.TRANSPARENT));//set background was transparent
 dialog.getWindow().setType(WindowManager.LayoutParams.TYPE_SYSTEM_ALERT);//需要添加的語句
        dialog.show();
    }

 

2、在AndroidManifest.xml中加入權限:

 

<uses-permission android:name="android.permission.SYSTEM_ALERT_WINDOW"></uses-permission>

 

總結:以上做法就是聲明我們要彈出的這個提示框是一個系統的提示框,即全局性質的提示框,所以只要手機處於開機狀態,無論它現在處於何種界面之下,只要調用alterObj.show(),就會彈出提示框來。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM