一、什麼是Android懸浮窗許可權?
Android懸浮窗許可權用於在應用中創建可懸浮於其他應用之上的窗口,讓用戶可以同時使用其他應用程序。
需要注意的是,自Android 8.0(API級別26)以後,懸浮窗許可權被分類為「應用程序窗口」許可權。應用程序窗口許可權僅適用於那些在前台運行的應用程序。有關此更改的詳細信息,請參見此處
二、如何獲取Android懸浮窗許可權?
1. 通過系統設置獲取許可權
用戶可以通過系統設置來為特定的應用程序授予懸浮窗許可權。
public static final int REQUEST_CODE = 1012; if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) { if (!Settings.canDrawOverlays(this)) { Intent intent = new Intent(Settings.ACTION_MANAGE_OVERLAY_PERMISSION, Uri.parse("package:" + getPackageName())); startActivityForResult(intent, REQUEST_CODE); } else { // 已經獲取了懸浮窗許可權,可以在此進行操作了 ... } }
上述代碼首先檢查設備的Android版本是否為6.0或更高版本,如果是,那麼會檢查特定應用程序是否已授予懸浮窗許可權。如果應用程序沒有許可權,則會打開系統設置界面,讓用戶授權。在接下來的流程中,需要重寫onActivityResult方法以判斷用戶是否已經授權。
2. 使用ACTION_MANAGE_OVERLAY_PERMISSION意圖獲取授權
除了通過系統設置來獲取許可權,還可以通過打開意圖的方式來獲取授權。
public static final int REQUEST_CODE = 1012; if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) { Intent intent = new Intent(Settings.ACTION_MANAGE_OVERLAY_PERMISSION, Uri.parse("package:" + getPackageName())); startActivityForResult(intent, REQUEST_CODE); }
上述代碼打開了ACTION_MANAGE_OVERLAY_PERMISSION意圖,這個意圖會啟動一個活動,該活動允許用戶授予特定應用程序懸浮窗許可權。同樣的,需要重寫onActivityResult方法以判斷用戶是否已經授權。
三、懸浮窗許可權的使用
1. 檢查許可權
一旦你已經獲取了懸浮窗許可權,接下來需要檢查用戶是否將該許可權回收。
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) { if (!Settings.canDrawOverlays(this)) { // 用戶已經回收了懸浮窗許可權 ... } else { // 懸浮窗許可權可用,執行相關操作 ... } }
2. 添加懸浮窗視圖
在應用程序中顯示懸浮窗具體實現可以使用WindowManager類或任何適當的第三方庫。
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) { params.type = WindowManager.LayoutParams.TYPE_APPLICATION_OVERLAY; } else { params.type = WindowManager.LayoutParams.TYPE_PHONE; } windowManager.addView(view, params);
上述代碼中,params.type在Android O(API級別26)之後始終為WindowManager.LayoutParams.TYPE_APPLICATION_OVERLAY。小於API 26的設備,則應使用WindowManager.LayoutParams.TYPE_PHONE類型,如上所示。
3. 刪除懸浮窗視圖
如果要刪除懸浮窗視圖,則應使用WindowManager.removeView方法。
windowManager.removeView(view);
四、總結
Android懸浮窗許可權的使用需要獲取許可權和相應的使用。要獲取許可權,可以使用系統設置或ACTION_MANAGE_OVERLAY_PERMISSION意圖,使用則需要檢查許可權、添加懸浮窗視圖和刪除懸浮窗視圖。
原創文章,作者:小藍,如若轉載,請註明出處:https://www.506064.com/zh-tw/n/279475.html