適配懸浮窗權限與系統設置修改權限

Github: github.com/czy1121/set…
Blog: reezy.me/2016-12-25/…html

Android 6.0的特殊權限(Special Permissions)包括java

  • 懸浮窗權限(SYSTEM_ALERT_WINDOW)
  • 系統設置修改權限(WRITE_SETTINGS)

Android 6.0之前只要在manifest中申請了權限就是默認開啓的
Android 6.0+須要在manifest中申請而且經過發送Intent讓用戶在設置界面進行勾選 android

適配

檢測git

  • API 23+(Android 6.0+/M) 使用 Settings.canDrawOverlays, Settings.System.canWrite
  • API 18+(Android 4.3+/JellyBean MR2) 經過反射使用 AppOpsManager.checkOp
  • API < 18 默認權限開啓,時始終返回 true

受權 github

  • API 23+(Android 6.0+/M) 去系統設置面板就好
    new Intent(Settings.ACTION_MANAGE_OVERLAY_PERMISSION);
    new Intent(Settings.ACTION_MANAGE_WRITE_SETTINGS);複製代碼
  • API 18+(Android 4.3+/JellyBean MR2) 默認權限開啓
  • API < 18 默認權限開啓,不作任何處理

切換受權狀態api

AppOpsManager.setMode 可用於Android 4.3/4.4修改受權狀態安全

API 18 添加AppOpsManager(被隱藏,在Android 4.4公開)
API 21 後須要簽名驗證的權限android.Manifest.permission.UPDATE_APP_OPS_STATS,第三方應用用不了了。app

ROM測試

有些Rom會默認禁用權限,一般都有自帶的權限管理spa

API 18+ 有些Rom會默認禁用權限,一般都有自帶的權限管理,這時就須要檢測Rom類型而後跳轉到對應的設置頁面

API 23+ 原本去系統設置面板就行了,但有些Rom會用自帶的權限管理替代系統設置面板,這時仍然須要檢測Rom類型而後跳轉到對應的設置頁面

其實是跳轉到手機上的安全中內心對應的權限設置頁,當安全中心版本不一樣時相應的權限設置頁也有可能不同

還有部分ROM的應用詳細信息頁能夠設置權限

測試

主要是測了懸浮窗權限

設備 系統版本 ROM版本 狀態 跳轉
華爲 榮耀7i 6.0.1 4.0 默認禁用 ok
華爲 榮耀暢玩5X 5.1.1 4.0.1 默認禁用 ok
華爲 Ascend P7 5.1.1 3.1 默認禁用 ok
華爲 榮耀6 5.1.1 3.1 默認禁用 ok
華爲 榮耀6Plus 4.4.4 3.0 默認禁用 ok
華爲 暢享5S 5.1 3.0 默認禁用 ok
華爲 P8 5.0.1 3.1 默承認用 ok,無安全中心
小米 MI 5 6.0 V7 默認禁用 ok
小米 Note Pro 5.1.1 V8 默認禁用 ok
小米 紅米 Pro 6.0 V8 默認禁用 ok
小米 紅米1S 4.4.2 V7 默認禁用 ok
魅族 Pro5 5.1 5.1.11 默認禁用 ok
魅族 MX4 5.1 5.1.5 默認禁用 ok
魅族 魅藍Note2 5.1 5.1.5 默認禁用 ok
魅族 M1 4.4.4 4.2.1 默承認用 ok
懸浮窗不能覆蓋到其它應用上
詳情頁有懸浮窗權限設置,禁用後無影響
錘子 堅果 5.1.1 2.5.3 默認禁用 ok
錘子 堅果 4.4.4 2.1.2 默認禁用 ok
OPPO A53 5.1.1 2.1 默承認用 ok
OPPO R7s 4.4.4 2.1 默承認用 ok
VIVO X6S Plus 5.1.1 2.5 默承認用 到達i管家主頁,未到懸浮窗管理頁
VIVO X6 5.1 2.5 默承認用 到達i管家主頁,未到懸浮窗管理頁
VIVO X5 5.0 2.5 默承認用 到達i管家主頁,未到懸浮窗管理頁
VIVO X5M 5.0.2 2.0 默承認用 ok, i管家沒有懸浮窗管理功能
VIVO Y23L 4.4.4 1.5 默承認用 ok, i管家沒有懸浮窗管理功能
奇酷 青春版 5.1 / 默認禁用 ok
奇酷 F4 5.1 / 默認禁用 ok
奇酷 N4 6.0 / 默認禁用 ok
奇酷 N4S 6.0.1 / 默認禁用 ok
三星 Galaxy S6 6.0.1 / 默承認用 ok
三星 Galaxy Note4 6.0.1 / 默承認用 ok
摩托羅拉 X Style 5.1.1 / 默承認用 ok
聯想 樂檬3 5.1.1 / 默承認用 ok
酷派 鋒尚 pro 4.4.4 / 默承認用 ok
金立 F103 5.0 / 默承認用 ok
樂視 樂 Max 6.0.1 / 默承認用 ok

百度雲真機
mtc.baidu.com/tinypace/ma…

騰訊優測真機
remote.utest.qq.com/deviceSearc…

兼容庫

github.com/czy1121/set…

歡迎star,fork,issue

screenshot.png

API

// 檢測是否受權
SettingsCompat.canDrawOverlays(Context)
SettingsCompat.canWriteSettings(Context)

// 設置受權狀態,僅在未深度定製的 Android 4.3/4.4 上可用
SettingsCompat.setDrawOverlays(Context, boolean)
SettingsCompat.setWriteSettings(Context, boolean)

// 跳轉到懸浮窗權限設置頁
SettingsCompat.manageDrawOverlays(Context)
// 跳轉到系統設置修改權限設置頁,暫時只支持 Android 6.0+
SettingsCompat.manageWriteSettings(Context)複製代碼

參考

Android 懸浮窗權限各機型各系統適配大全
blog.csdn.net/self_study/…
github.com/zhaozepeng/…

Android M 權限最佳實踐
chen-wei.me/2016/11/10/…

Android 權限管理 —— AppOps
3dobe.com/archives/51…

Android 4.3 隱藏功能 App Ops 分析
mssun.me/blog/androi…

androidxref.com/4.3_r2.1/xr…

相關文章
相關標籤/搜索