Android跳轉(zhuǎn)應(yīng)用單獨的懸浮窗權(quán)限控制頁

在Android開發(fā)中,從Android 6.0(API 級別 23)開始,Google對懸浮窗權(quán)限進行了更嚴格的控制,要求用戶明確授予權(quán)限。這意味著如果你的應(yīng)用需要顯示懸浮窗(例如,一個浮動窗口),你需要在運行時請求權(quán)限。而且這個權(quán)限比較特殊,需要跳轉(zhuǎn)系統(tǒng)的設(shè)置頁由用戶手動開啟權(quán)限開關(guān)。

由于國內(nèi)廠商對于安卓系統(tǒng)的魔改,很大部分機型跳轉(zhuǎn)后是一個可開啟懸浮窗權(quán)限的應(yīng)用列表,需要用戶在列表中找出自己是哪個應(yīng)用并把開關(guān)開啟,這對于很大部分用戶來說可能存著極大的使用障礙。

Google官方推薦的是使用Settings.ACTION_MANAGE_OVERLAY_PERMISSION intent action進行頁面跳轉(zhuǎn),但是由于上述用戶可能存在使用障礙的原因,其實在 系統(tǒng)源碼還有一種比較隱秘的跳轉(zhuǎn)方式,可以跳轉(zhuǎn)到目標應(yīng)用單獨權(quán)限控制的頁面,但僅對市面上的部分機型生效(這里就不列舉了,自己找)。

AndroidManifest.xml中需要添加的懸浮窗權(quán)限
<uses-permission android:name="android.permission.SYSTEM_ALERT_WINDOW"/>
通用的跳轉(zhuǎn)
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
    if (!Settings.canDrawOverlays(context)) {
        val intent = Intent(Settings.ACTION_MANAGE_OVERLAY_PERMISSION)
        intent.data = Uri.parse("package:" + context.packageName)
        context.startActivity(intent)
    }
}
比較隱秘的跳轉(zhuǎn)方式,方便用戶控制,部分新機型生效
val intent = Intent()
val t = "com.android.settings"
val packageName = context.packageName
intent.setComponent(ComponentName(t, "${t}.SubSettings"))
intent.putExtra("package", packageName)
intent.data = Uri.parse("package:${packageName}")
intent.putExtra(
    ":settings:show_fragment", "com.android.settings.applications.appinfo.DrawOverlayDetails"
)
intent.putExtra(":settings:show_fragment_args", Bundle().apply {
    putString("package", packageName)
})
intent.putExtra("settings:ui_options", ActivityInfo.UIOPTION_SPLIT_ACTION_BAR_WHEN_NARROW)
intent.putExtra(":settings:show_fragment_as_subsetting", true)
intent.putExtra(":settings:show_fragment_title", "xxxxxx")
intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK)
context.startActivity(intent)
如果本文對你有幫助就點個贊支持下吧~
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

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

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