在Android开发中,从Android 6.0(API 级别 23)开始,Google对悬浮窗权限进行了更严格的控制,要求用户明确授予权限。这意味着如果你的应用需要显示悬浮窗(例如,一个浮动窗口),你需要在运行时请求权限。而且这个权限比较特殊,需要跳转系统的设置页由用户手动开启权限开关。
由于国内厂商对于安卓系统的魔改,很大部分机型跳转后是一个可开启悬浮窗权限
的应用列表,需要用户在列表中找出自己是哪个应用并把开关开启,这对于很大部分用户来说可能存着极大的使用障碍。
Google官方推荐的是使用Settings.ACTION_MANAGE_OVERLAY_PERMISSION
intent action进行页面跳转,但是由于上述用户可能存在使用障碍的缘由,实则在 系统源码
还有一种比较隐秘的跳转方式,可以跳转到目标应用单独权限控制的页面,但仅对市面上的部分机型生效(这里就不列举了,自己找)。
AndroidManifest.xml中需要添加的悬浮窗权限
<uses-permission android:name="android.permission.SYSTEM_ALERT_WINDOW"/>
通用的跳转
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)
}
}
比较隐秘的跳转方式,方便用户控制,部分新机型生效
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)
如果本文对你有协助就点个赞支持下吧~
© 版权声明
文章版权归作者所有,未经允许请勿转载。如内容涉嫌侵权,请在本页底部进入<联系我们>进行举报投诉!
THE END
暂无评论内容