天天看點

android 系統全局彈框_Android 全局彈出對話框SYSTEM_ALERT_WINDOW權限

原标題:Android 全局彈出對話框SYSTEM_ALERT_WINDOW權限

方案一、

1、在開發中有時會用到全局彈出對話框但必須在manifest中申請權限:

2、建立Dialog

AlertDialog.Builder builder= newAlertDialog.Builder( this);

builder.setIcon(R.drawable.logo_mini);

builder.setTitle( "下線通知").setMessage( "該賬号在另一台Android裝置上登入。")

.setPositiveButton( "重新登陸", newDialogInterface.OnClickListener() {

@Override

publicvoidonClick(DialogInterface dialog, intwhich){

//do somthing

}

}).setNegativeButton( "退出", newDialogInterface.OnClickListener() {

@Override

publicvoidonClick(DialogInterface dialog, intwhich){

Intent i= newIntent(CoreService. this,LoginActivity.class);

i.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);

startActivity(i);

}

});

alertDialog = builder.create();

alertDialog.setCancelable( false);

alertDialog.setCanceledOnTouchOutside( false);

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

alertDialog.show();

注意要設定Dialog的Window類型為

WindowManager.LayoutParams.TYPE_SYSTEM_ALERT。

方案二、

采用方案一帶來的問題:

使用者在安裝應用時會詢問使用者是否授權問題

同時在小米手機上預設是禁止系統彈出框的,應用中的系統彈出框将不能夠彈出

那能不能不申請系統權限,又能彈出提示框提示使用者呢?

這裡妨轉換思路,既然系統彈出框彈不出,我們就不采用系統彈出框,給他彈個Activity替代。但這個時候注意,要再Service是中或者ApplicationContext中startActivity時要添加額外标志ntent.FLAG_ACTIVITY_NEW_TASK:

Intent i=new Intent( this,ActDialog. class);

i.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);

startActivity(i);

//代碼中ActDialog其實是一個Activity把主題給它應用@android:style/Theme.Dialog

//把activity做的像一個Dialog的風格

這樣解決了權限申請和小米手機全局Dialog預設無法展示的問題。

最後補充一下在方案一中也可以不申請權限就能彈出對話框,将彈出Window type 改為LayoutParams.TYPE_TOAST,但是這種類型的彈出框是不能接受事件處理的。傳回搜狐,檢視更多

責任編輯: