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(),就會彈出提示框來。