標籤:
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(),就會彈出提示框來。
android service Dialog 彈出框