Android不同系统版本的悬浮窗权限问题

Android权限动态申请(包括悬浮窗) 【代码】Android权限动态申请。 阅读详情

Android悬浮窗权限问题

一、悬浮窗适配的两种方法:

1、按照正规的流程,如果系统没有赋予 APP 弹出悬浮窗的权限,就先跳转到权限授权界面,等用户打开该权限之后,再去弹出悬浮窗,比如 QQ 等一些主流应用就是这么做得;
2、利用系统的漏洞,绕过权限的申请,简单粗暴;不建议使用,因为兼容性有待商榷。
3、大脑模糊区域:悬浮窗与对话框权限是不同的,是不一样的。

二、不同系统版本之间的差异(以正规流程申请权限)

1、API 19之前:
  • 直接调用 WindowManager 的 addView 方法弹出即可。
  • 由于判断权限的类 AppOpsManager 是 API19 版本添加,所以Android 4.4 之前的版本(不包括4.4)就不用去判断了。
2、Android 4.4 ~ Android 5.1.1:(需要引导用户手动打开申请权限)
  • 由于碎片化程度比较大,所以需要针对特定机型进行适配
  • 主要问题在于,如何检测出不同产商的ROM,不同产商的ROM如何引导用户手动打开申请权限,可参考博客(http://blog.youkuaiyun.com/self_study/article/details/52859790)
  • 各ROM版本,通用检查悬浮窗权限方法
//OP_SYSTEM_ALERT_WINDOW = 24;

@TargetApi(Build.VERSION_CODES.KITKAT)
private static boolean checkOp(Context context, int op) {
    final int version = Build.VERSION.SDK_INT;
    if (version >= 19) {
        AppOpsManager manager = (AppOpsManager) context.getSystemService(Context.APP_OPS_SERVICE);
        try {
            Class clazz = AppOpsManager.class;
            Method method = clazz.getDeclaredMethod("checkOp", int.class, int.class, String.class);
            return AppOpsManager.MODE_ALLOWED == (int) method.invoke(manager, op, Binder.getCallingUid(), context.getPackageName());
        } catch (Exception e) {
            Log.e(TAG, Log.getStackTraceString(e));
        }
    } else {
        Log.e(TAG, "Below API 19 cannot invoke!");
    }
    return false;
}
3、Android 6.0:
  • 悬浮窗权限在 6.0 之后就被 google 单独拿出来管理了,因此在所有手机和 6.0 以及之后的版本上适配的方法都是一样的
  • 在 AndroidManifest.xml中静态申请
<uses-permission android:name="android.permission.SYSTEM_ALERT_WINDOW" />
  • 在使用时先判断该权限是否已经被授权,如果没有授权使用下面这段代码进行动态申请:
// 检查是否已经申请了 权限
if (Build.VERSION.SDK_INT >= 23) {
    try {
        Class clazz = Settings.class;
        Method canDrawOverlays = clazz.getDeclaredMethod("canDrawOverlays", Context.class);
        result = (Boolean) canDrawOverlays.invoke(null, context);
    } catch (Exception e) {
        Log.e(TAG, Log.getStackTraceString(e));
    }
}

// 跳转到设置页面,引导用户手动打开申请权限
try {
    Class clazz = Settings.class;
    Field field = clazz.getDeclaredField("ACTION_MANAGE_OVERLAY_PERMISSION");

    Intent intent = new Intent(field.get(null).toString());
    intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
    intent.setData(Uri.parse("package:" + context.getPackageName()));
    context.startActivity(intent);
} catch (Exception e) {
}
Android自动授予应用程序悬浮窗权限 在Android开发中,悬浮窗权限是一项重要的功能,它允许应用程序在其他应用程序的上层显示自定义视图。默认情况下,Android不会自动授予应用程序悬浮窗权限,用户需要手动在系统设置中为应用程序授予此权限。本文将介绍如何根据应用程序的包名自动授予悬浮窗权限,并提供相应的源代码。通过这些步骤,我们可以实现根据应用程序的包名自动授予悬浮窗权限的功能。当应用程序启动时,会检查悬浮窗权限是否已经授予,如果未授予,则会跳转到授权页面让用户手动授予权限。接下来,我们需要创建一个服务类来处理自动授予悬浮窗权限的逻辑。 阅读详情

相关推荐

SDR实战(四)-AD9361使用手册(三)

本节定义了并行数据端口和串行外设接口(SPI),它们使得AD9361与基带处理器(BBP)之间能够传输数据和控制/状态信息。图63展示了这些接口,并提供了AD9361和BBP在宽带无线系统中使用方式的高级概述。数据接口以两种模式之一运行:兼容标准CMOS模式或兼容低压差分信号(LVDS)模式。每个接口都具有以下部分描述的独特特性。使用CMOS模式时:保持了单端-CMOS逻辑兼容性。可以使用一个或两个数据端口。使用两个端口可以提高数据吞吐量。

hutx0924的博客 6244

Android悬浮窗功能实现

在Android开发中我们想要做到提醒用户关键信息的作用的时候.例如App更新信息之类的,有很多种方式去实现,主要的话还是三种方式Dialog,AlertDialog,PopupWindow,但是他们都有一个共同的缺点那就是依赖于Activity,而悬浮窗是不依赖Activity的,甚至,App在后台运行,悬浮窗依旧会弹出来,只要App进程不被杀死,但是悬浮窗也有缺点,那就是权限问题。这是因为我的手机为Android7我用的是被淘汰的TYPE类型,这个情况下我们需要更换TYPE类型就能解决对应的问题。

small_bird_top的博客 8803

vasp计算练习1-Si

si的vasp训练流程

qq_41074165的博客 3296

android 悬浮窗

现在很多应用都使用到悬浮窗,例如微信在视频的时候,点击Home键,视频小窗口仍然会在屏幕上显示。这个功能在很多情况下都非常有用。

日积月累 3327

8台 × 8卡 910B NPU之顶尖大模型选型分析

本文对比了2026年主流大语言模型在昇腾910B NPU集群上的部署方案。重点评估了GLM5、MiniMax M2.5、Kimi K2.5、DeepSeek V3.2和Qwen 3.5旗舰版等候选模型,从部署需求(显存占用)、能力表现(基准测试、多模态支持)和NPU生态适配度三个维度进行分析。结果显示DeepSeek V3.2综合表现最优:支持BF16/W8A8/INT4量化,在4TB显存环境下可实现2000+ TPS,首token延迟<100ms,且具备官方NPU支持。备选方案Qwen 3.5旗舰版

FeelTouch Labs 755

嵌入式学习笔记- 关于电容的纹波电流

纹波电流是导致电解电容发热、影响其寿命的关键交流电流成分。它不是一种特殊的电流,而是电路中必然存在的现象。要重视,不能忽视。必须保证电路中的纹波电流 < 电容的额定纹波电流。电容鼓包爆浆,要怀疑是否是纹波电流过大或电容ESR变大所致。希望这个解释能帮助您彻底理解这个概念!二 电容纹波电流与频率的关系在大多数情况下,频率越高,电容所能承受的额定纹波电流值越大。【个人理解:因为频率越低ESR越大,具体见第三节ESR与频率的关系】下面我为您详细解释为什么会这样,以及在实际应用中如何考虑。

qq_35771411的博客 2193

Android各版本查询和开启悬浮窗权限

Android 悬浮窗权限

dodod2012的专栏 8316

为什么你的Mac蓝牙总断连?深入解析硬件干扰与系统设置避坑

本文深入解析Mac蓝牙频繁断连的原因,包括硬件干扰(如WiFi同频干扰、USB设备电磁干扰)和系统设置问题,并提供详细的优化方案和诊断工具(如blueutil)使用指南,帮助用户有效解决蓝牙稳定性问题。

ik67890123的博客 682

android检查悬浮窗权限,Android 悬浮窗权限校验

悬浮窗权限:权限检验和请求://检查是否已经授予权限,大于6.0的系统适用,小于6.0系统默认打开,无需理会if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M&&!Settings.canDrawOverlays(this)) {//没有权限,需要申请权限,因为是打开一个授权页面,所以拿不到返回状态的,所以建议是在onResu...

weixin_30404219的博客 1710

从零开始用TS开发babylonjs - 本机环境搭建

babylonjs,初始化本地安装,web3d引擎

han3527638的专栏 794

基于 Vivado HLS 的 AC97 音频系统设计

介绍一种基于 FPGA 的 AC97 音频系统设计。系统的核心部件采用 Xilinx Atlys 的板载 Spartan6 XCSLX45 芯片,使用的工具为 Xilinx 的高层 次 综 合 技 术 Vivado HLS。首先使用 C /C + + 代码编写的算法描述系统的 FIR 滤波器; 然后按 照 Vivado HLS 编译工具的规范,将程序代码转换为 RTL 模型,快速、直接地生成对 应左右声道的 FIR IP 核和综合结果; 再结合互连的 MicroBlaze 处理器 IP 核,处理 一段立体声

qq_43416206的博客 326

Android 悬浮窗层级/WindowManager Type限制适配

WindowManager 悬浮窗大家应该经常用了,在这咱不说他的具体实现,也不谈他的源码分析。 主要探讨权限适配,层级介绍,还有可能的Bug。 一、层级 悬浮层本质上是将view送给WindowManager去玩,它将view设置不同类型,也就有了不同的层级(z轴)展示,不一样的价钱不一样的服务。 总体来说有应用窗口(APPLICATION_WINDOW)、子窗口(SUB_WIN...

空名先生 1万+

lwip-2.0.3

lwip是瑞典计算机科学院(SICS)的Adam Dunkels 开发的一个小型开源的TCP/IP协议栈。实现的重点是在保持TCP协议主要功能的基础上减少对RAM 的占用。

android多个悬浮窗口,Android我还可以相信你多少系列文章四之悬浮窗

我即将在2017.7.8号开一个直播讲堂,感兴趣的同学点击快来参加吧:https://segmentfault.com/l/15...内容包括:Android 知识体系分享从入门到提高的学习路径如何进一步突破瓶颈,进一步提升充足的时间和大家讨论,回答大家问题自我介绍:网易 Android 专家工程师,网易云音乐 Android 负责人,主导从零开发了网易云音乐 Android客户端,目前是杭州研究...

weixin_32734545的博客 418

visio安装包

Microsoft Office Visio 是一款专业的制图软件。利用经过更新的形状、协作工具和数据链接图表,创建专业级图表以简化复杂的信息。

IMSL CNL 7.0.0 (x86-64)Crack

IMSL CNL 7.0.0 (x86-64)Crack intel的算法库破解文件,这是C++版本的破解文件

安卓麦克风权限在应用到后台后,权限丢失,发不出声音

补充一个点,startForgroundService发生后,10s内要service#onStartCommand内执行到 startForeground方法,否则就会崩溃,但是startForeground方法有过补充,在安卓10以下,只有startForeground(id,notification),没有type参数,所以需要区别使用,否则就会anr崩溃。但是我照着文档demo和网上的提供代码,最终效果发现没有这个通知栏在上面,启动失败,但是服务是正常运行的,生命周期的日志正常,就是不见通知踪影。

weixin_44267597的博客 4942

efm32 入门.pdf

本PDF共计22页,介绍的是操作驱动API,下载与否自己斟酌。

android悬浮窗有多少种类型,Android我还可以相信你多少系列文章四之悬浮窗

悬浮窗应该算各大厂商最先开始对应用下手的地方。悬浮窗之所以讨人厌同样是因为被滥用,就像狗皮膏药一样贴在屏幕的上下左右,不管切换到哪个应用始终显示在最上层。悬浮窗的需求有点从电脑端延续的味道,以前桌面上经常跑出来个狮子,有个悬浮球,或者歌词。但那个时候占用桌面面积小,相比手机屏幕尺寸,现在的悬浮窗很容易覆盖住真正内容。那Android上面悬浮窗最初设计是想解决什么问题呢?悬浮窗也即一个Window。...

weixin_42098892的博客 796

android多个悬浮窗口,Android 8.0如何完美适配全局dialog悬浮窗弹出

前言最近项目targetSdkVersion升级到了26,出现很多问题趟了很多坑,其中就包括本篇的需要解决的问题:全局dialog 不显示。出现场景有时候我们需要在App中弹dialog,但是却不知道依附的是哪个Activity,这个时候通常会启动一个service来依附,显示一个全局的dialog。Android 6.0出现的悬浮窗权限为什么从6.0说起?在Android6.0之后,使用悬浮窗功...

weixin_26934905的博客 892

android 8.0自定义全局对话框,Android 8.0如何完美适配全局dialog悬浮窗弹出

前言最近项目targetSdkVersion升级到了26,出现很多问题趟了很多坑,其中就包括本篇的需要解决的问题:全局dialog 不显示。出现场景有时候我们需要在App中弹dialog,但是却不知道依附的是哪个Activity,这个时候通常会启动一个service来依附,显示一个全局的dialog。Android 6.0出现的悬浮窗权限为什么从6.0说起?在Android6.0之后,使用悬浮窗功...

weixin_32943807的博客 390

android适配华为m5,2019-05-29 Android悬浮窗适配全机型,包含8.0,小米魅族华为悬浮窗权限适配demo看这一篇就够了...

兼容8.0,小米,魅族,华为等难适配机型都可完美适配。悬浮窗插入接口在实现悬浮窗之前,我们需要知道通过什么接口,能够将一个控件放入到屏幕中去。 Android的界面绘制,都是通过WindowMananger的服务来实现的。那么,既然要实现一个能够在自身应用以外的界面上的悬浮窗,我们就要利用WindowManager来“做手脚”。(frameworks/base/core/java/android/...

weixin_39911567的博客 399

华为Android 8.0以上悬浮窗权限正确开启方式

Android 8.0以上悬浮窗权限正确开启方式 开发中在android 8.0上遇到了一个判断悬浮窗权限是否开启的问题,当在一个界面弹出dialog提示用户开启悬浮窗权限,用户点击之后,跳转到设置界面开启悬浮窗权限,然后返回该页面,Settings.canDrawOverlays(context) 进行权限开启的判断,结果返回的是false;程序接收到的是权限没有开启,但是到设置里面查看确实是开......

热爱技术 2万+

android 悬浮窗口和主界面同时显示,Android 悬浮窗口(及解决6.0以上无法显示问题)...

思路实现通过WindowManager添加一个View,创建一个系统顶级的窗口,实现悬浮窗口的效果。本篇思路,来源于郭霖大神的悬浮窗口教程。大致介绍WindowManager 类创建的对象:Context.getSystemService(Context.WINDOW_SERVICE)常用API:addView():添加一个View对象updateViewLayout():更新指定的View对象r...

weixin_39702559的博客 518

关于悬浮球(悬浮窗)Android8.0(Android O)的适配

最近项目新需求要用到悬浮球技术,因以前的工作项目中就用到了这个技术,因此看到这个需求时心里是愉悦的,心念着照搬过来即可。开发中也确实如此,直接搬过来,然后测试了三星C5,小米Note4以及OPPO手机,运行顺畅,均无异常。当测试到华为Honor8青春版时,就GG了。抛出了以下异常: java.lang.RuntimeException: Unable to create service com....

haoyuegongzi的博客 4297

java关闭悬浮窗,Android8.0通知栏和悬浮窗新改动

Android8.0通知栏和悬浮窗新改动通知栏Android8.0新引入了Notification Channels(Notification Channels),以提供统一的系统来帮助用户管理通知,如果使用的8.0系统,必须调用Notification.Builder.setChannelId(String channelId)来设置渠道id。具体可以参考Android O Preview 之 ...

weixin_42297705的博客 488

弹出悬浮窗口全过程

void doShowDesktop(Context Ctx ,int viewLayoutId){ try{ /* * 申请常规权限 * */ String[] permissionManifest = { Manifest.perm...

baeeqregist的博客 345

Android6.0开启悬浮窗的解决方案| permission denied for window type 2003 , 2038

Android6.0开启悬浮窗的解决方案| permission denied for window type 2003

QG 8339
上一篇: librtmp开源库与android平台编译记录
下一篇: Linux常用命令
艾特小王子
博客等级 码龄10年 6粉丝 17原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值