適配懸浮窗權(quán)限與系統(tǒng)設(shè)置修改權(quán)限

Android 6.0 的 特殊權(quán)限(Special Permissions) 包括

  • 懸浮窗權(quán)限(SYSTEM_ALERT_WINDOW)
  • 系統(tǒng)設(shè)置修改權(quán)限(WRITE_SETTINGS)

Android 6.0以前只要在manifest中申請了權(quán)限就是默認(rèn)開啟的
Android 6.0+需要在manifest中申請并且通過發(fā)送Intent讓用戶在設(shè)置界面進(jìn)行勾選

適配

檢測

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

授權(quán)

  • API 23+(Android 6.0+/M) 去系統(tǒng)設(shè)置面板就好
new Intent(Settings.ACTION_MANAGE_OVERLAY_PERMISSION)
new Intent(Settings.ACTION_MANAGE_WRITE_SETTINGS)
  • API 18+(Android 4.3+/JellyBean MR2) 默認(rèn)權(quán)限開啟
  • API < 18 默認(rèn)權(quán)限開啟,不做任何處理

切換授權(quán)狀態(tài)

AppOpsManager.setMode 可用于Android 4.3/4.4修改授權(quán)狀態(tài)

API 18 添加AppOpsManager(被隱藏,在Android 4.4公開)
API 21 后需要簽名驗(yàn)證的權(quán)限android.Manifest.permission.UPDATE_APP_OPS_STATS,第三方應(yīng)用用不了了。

ROM

API 18+ 有些Rom會默認(rèn)禁用權(quán)限,通常都有自帶的權(quán)限管理,這時就需要檢測Rom類型然后跳轉(zhuǎn)到對應(yīng)的設(shè)置頁面

API 23+ 本來去系統(tǒng)設(shè)置面板就好了,但有些Rom會用自帶的權(quán)限管理替代系統(tǒng)設(shè)置面板,這時仍然需要檢測Rom類型然后跳轉(zhuǎn)到對應(yīng)的設(shè)置頁面

實(shí)際上是跳轉(zhuǎn)到手機(jī)上的安全中心里對應(yīng)的權(quán)限設(shè)置頁,當(dāng)安全中心版本不同時相應(yīng)的權(quán)限設(shè)置頁也有可能不一樣

還有部分ROM的應(yīng)用詳細(xì)信息頁可以設(shè)置權(quán)限

測試

主要是測了懸浮窗權(quán)限

設(shè)備 系統(tǒng)版本 ROM版本 默認(rèn) 跳轉(zhuǎn)
華為 榮耀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
華為 暢享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
魅族 魅藍(lán)Note2 5.1 5.1.5 禁用 ok
魅族 M1 4.4.4 4.2.1 可用 ok
懸浮窗不能覆蓋到其它應(yīng)用上
詳情頁有懸浮窗權(quán)限設(shè)置
禁用后無影響
錘子 堅(jiān)果 5.1.1 2.5.3 禁用 fail
到達(dá)懸浮窗管理頁,但隨后奔潰
錘子 堅(jiān)果 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 可用 到達(dá)i管家主頁
未到懸浮窗管理頁
VIVO X6 5.1 2.5 可用 到達(dá)i管家主頁
未到懸浮窗管理頁
VIVO X5 5.0 2.5 可用 到達(dá)i管家主頁
未到懸浮窗管理頁
VIVO X5M 5.0.2 2.0 可用 ok
i管家無懸浮窗管理
VIVO Y23L 4.4.4 1.5 可用 ok
i管家無懸浮窗管理
三星 Galaxy S6 6.0.1 / 可用 ok
三星 Galaxy Note4 6.0.1 / 可用 ok
摩托羅拉 X Style 5.1.1 / 可用 ok
聯(lián)想 樂檬3 5.1.1 / 可用 ok
酷派 鋒尚 pro 4.4.4 / 可用 ok
金立 F103 5.0 / 可用 ok
樂視 樂 Max 6.0.1 / 可用 ok

百度云真機(jī)
http://mtc.baidu.com/tinypace/main#/?from=DaoHang

騰訊優(yōu)測真機(jī)
http://remote.utest.qq.com/deviceSearch?type=remote

兼容庫

https://github.com/czy1121/settingscompat

歡迎star,fork,issue

screenshot.png
screenshot.png

API

// 檢測是否授權(quán)
SettingsCompat.canDrawOverlays(Context)
SettingsCompat.canWriteSettings(Context)

// 設(shè)置授權(quán)狀態(tài),僅在未深度定制的 Android 4.3/4.4 上可用
SettingsCompat.setDrawOverlays(Context, boolean)
SettingsCompat.setWriteSettings(Context, boolean)

// 跳轉(zhuǎn)到懸浮窗權(quán)限設(shè)置頁
SettingsCompat.manageDrawOverlays(Context)
// 跳轉(zhuǎn)到系統(tǒng)設(shè)置修改權(quán)限設(shè)置頁,暫時只支持 Android 6.0+
SettingsCompat.manageWriteSettings(Context)

參考

Android 懸浮窗權(quán)限各機(jī)型各系統(tǒng)適配大全
http://blog.csdn.net/self_study/article/details/52859790
https://github.com/zhaozepeng/FloatWindowPermission

Android M 權(quán)限最佳實(shí)踐
http://chen-wei.me/2016/11/10/android-permission-best-practice/

Android 權(quán)限管理 —— AppOps
http://3dobe.com/archives/51/

Android 4.3 隱藏功能 App Ops 分析
https://mssun.me/blog/android-4-3-app-ops-analysis.html

http://androidxref.com/4.3_r2.1/xref/frameworks/base/core/java/android/app/AppOpsManager.java

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • Android 自定義View的各種姿勢1 Activity的顯示之ViewRootImpl詳解 Activity...
    passiontim閱讀 178,725評論 25 709
  • 轉(zhuǎn)載請注明出處:Android懸浮窗權(quán)限適配 懸浮窗相信大家都不陌生,比如360手機(jī)衛(wèi)士的加速球,視頻應(yīng)用的小窗,...
    夏末m閱讀 11,952評論 1 6
  • 在Android的設(shè)計中,資源的訪問或者網(wǎng)絡(luò)連接,要得到這些服務(wù)都需要聲明其訪問權(quán)限,否則將無法正常工作。在And...
    a2bfbb8a095f閱讀 25,505評論 6 73
  • 關(guān)于撲克牌我們都不陌生。但是在斗地主炸金花的時候你有木有想過: 1.為啥一副牌有54張呢 2.為啥牌面大小是從1-...
    我是硬柿子閱讀 2,151評論 0 3
  • 去年九月份,我和LEON火急火燎地找了一個租房,坐落在省政府機(jī)關(guān)云集的地方,屬現(xiàn)代武漢的老房子,七層樓的老式階梯房...
    婷下來思考閱讀 227評論 0 0

友情鏈接更多精彩內(nèi)容