Android申請懸浮窗權(quán)限的目的
懸浮窗權(quán)限是Android提供的權(quán)限中的特殊權(quán)限,要申請后再使用琉预,否則會導(dǎo)致彈框不能顯示、程序崩潰等問題
注意事項
- 懸浮窗適配總體思路
if(系統(tǒng)沒有賦予APP彈出懸浮窗的權(quán)限){
等用戶打開權(quán)限后壤巷,再彈出懸浮窗
}else{
直接彈出懸浮窗
} - 例如要顯示一個Dialog設(shè)置其為 系統(tǒng)級別 的
mDialog.getWindow().setType(WindowManager.LayoutParams.TYPE_SYSTEM_ALERT);
有的文章說MIUI系統(tǒng)可設(shè)置為WindowManager.LayoutParams.TYPE_TOAST
避開懸浮框權(quán)限的申請明也,我的實踐經(jīng)驗是不要這樣設(shè)置,否則利用參考文獻中的方法操作后dialog還是顯示不出來
- 寫程序時導(dǎo)入包要導(dǎo)正確崭歧,例如我們要用的Setting
import android.provider.Settings;
不要導(dǎo)錯 - 不同api版本下對懸浮窗權(quán)限的處理方法
- 由于判斷權(quán)限的類 AppOpsManager 是 API19 版本添加隅很,所以Android 4.4 之前的版本(不包括4.4)就不用去判斷了,直接調(diào)用 WindowManager 的 addView 方法彈出即可率碾。
- 懸浮窗權(quán)限在 6.0 之后就被 google 單獨拿出來管理了叔营,好處就是對我們來說適配就非常方便了屋彪,在所有手機和 6.0 以及之后的版本上適配的方法都是一樣的,首先要在 Manifest 中靜態(tài)申請<uses-permission android:name="android.permission.SYSTEM_ALERT_WINDOW" />權(quán)限绒尊,然后在使用時先判斷該權(quán)限是否已經(jīng)被授權(quán)畜挥,如果沒有授權(quán)使用下面這段代碼進行動態(tài)申請
參考文獻
Android 懸浮窗權(quán)限各機型各系統(tǒng)適配大全
Android懸浮窗及權(quán)限 by JustDo23
github項目