Android 11 ,默认授予预置应用/APK 需要的权限,解决permission denied for window type 2003 问题。

news2024/10/10 14:29:39

  写这篇文章的原因是解决了一个APP闪退的问题,闪退的原因是插拔U盘时,注册的广播接收者接收到广播需要弹出一个Dialog询问是否需要打开U盘,这个Dialog设置的是系统级别悬浮窗,没有这个权限,报错导致闪退,下面从具体报错开始看。注:我的这个APP是文件管理器,通过Android.mk预置到系统中,为系统应用不可卸载。

一、分析报错

  报错:

Unable to add window android.view.ViewRootImpl$W@5b87261 -- permission denied for window type 2003

  涉及到的代码块:

                if (null == usbDialog) {

                    usbDialog = new UsbDialog(context, R.style.Dialog);
                    usbDialog.setCancelable(true);
                    usbDialog.setCanceledOnTouchOutside(true);
                    
                    usbDialog.getWindow().setType(
                            WindowManager.LayoutParams.TYPE_SYSTEM_ALERT);

                    usbDialog.setCloseCallBack(new UsbDialog.CloseCallBack() {
                        @Override
                        public void onDismiss() {
                            closeusbDialog();
                        }
                    });

                    usbDialog.show();
                }

  WindowManager.LayoutParams.TYPE_SYSTEM_ALERT 这里设置了系统级悬浮窗类型,即该悬浮窗是悬浮在所有应用之上的包括launcher,开发过悬浮窗的小伙伴应该会比较熟悉,悬浮分为APP内悬浮和系统级悬浮,感兴趣的同学可以看看我的另一个篇文章 悬浮球入门教学。
  关于这个报错网上的大部分解决方式如下:
在这里插入图片描述
  总结一下意思就是在用户使用的时候弹窗给用户授权,我的文件管理器不能出现弹窗授权这种情况,所以该怎么默认授予应用 android.permission.SYSTEM_ALERT_WINDOW 这个权限呢?APP层面的修改肯定不行了,需要修改framework的代码。

二、解决问题

  需要修改的代码如下:
  代码路径 frameworks\base\services\core\java\com\android\server\pm\permission\DefaultPermissionGrantPolicy.java

新增下面的代码: 假设你的应用包名为 com.rpg.rebuild

    private static final Set<String> WINDOW_PERMISSIONS = new ArraySet<>();
    static {
        WINDOW_PERMISSIONS.add(Manifest.permission.SYSTEM_ALERT_WINDOW);
      
    }

	. . . . . .
	. . . . . .
	. . . . . .


        grantSystemFixedPermissionsToSystemPackage(pm,
            getDefaultProviderAuthorityPackage("com.rpg.rebuild", userId),
            userId,WINDOW_PERMISSIONS);     


注:需要预制成系统应用,上述代码才生效。

  写在最后:如果你是一个三方APP开发者,你的APP是上架应用商店的,目前是没有办法实现不弹窗给用户授予,就获得系统级悬浮窗口权限的,除非就是让手机厂商把你的三方APP预制到系统中像上面一样授予默认权限。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1862891.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【C语言】解决C语言报错:Dangling Pointer

文章目录 简介什么是Dangling PointerDangling Pointer的常见原因如何检测和调试Dangling Pointer解决Dangling Pointer的最佳实践详细实例解析示例1&#xff1a;释放内存后未将指针置为NULL示例2&#xff1a;返回指向局部变量的指针示例3&#xff1a;指针悬空后继续使用示例4&…

Python-PDF文件密码破解小工具

背景 经常从网络上下载的PDF笔记被加了密&#xff0c;在自己学习的过程中想要添加书签却因为没有密码无法添加&#xff0c;所以通过Python实现一个解密小工具&#xff0c;亲测大多数密码都可以破解。 代码 import os import tkinter as tk from tkinter import filedialog #…

三元前驱体废水回收镍钴工艺:环保与经济效益的双重胜利

在全球新能源产业迅猛发展的背景下&#xff0c;锂离子电池作为绿色能源的核心组件&#xff0c;其需求量激增&#xff0c;带动了上游材料市场&#xff0c;尤其是三元前驱体材料的蓬勃发展。然而&#xff0c;伴随着行业的快速扩张&#xff0c;三元前驱体生产过程中产生的含镍钴废…

Qt的学习之路

目录 一、信号槽机制 1.1 基本概念 1.2 特点 1.3 使用方法 1.4 信号槽连接类型 1.5 注意 二、元对象系统 2.1 基本概念 2.2 实现方式 2.3 主要特性 2.4 使用场景 三、国际化 3.1 标记可翻译的文本&#xff08;tr函数&#xff09; 3.2 生成翻译源文件&#xff08;…

Linux 磁盘空间清理

1.检查磁盘使用情况 #显示每个挂载点的磁盘使用量&#xff0c;以及可用空间和使用率 df -h #显示当前目录的全部文件和目录&#xff08;包括隐藏的&#xff09;,以MB显示 ll -h 2. du查看最大的目录或文件 #逐级检查某个目录下各个子目录的大小。从根目录开始&#xff0c;逐级…

【HashMap和HashSetyi以及散列表的拉链法,线性探测法详解】

&#x1f308;个人主页&#xff1a;SKY-30 ⛅个人推荐&#xff1a;基于java提供的ArrayList实现的扑克牌游戏 |C贪吃蛇详解 ⚡学好数据结构&#xff0c;刷题刻不容缓&#xff1a;点击一起刷题 &#x1f319;心灵鸡汤&#xff1a;总有人要赢&#xff0c;为什么不能是我呢 &…

TSLANet:时间序列模型的新构思

实时了解业内动态&#xff0c;论文是最好的桥梁&#xff0c;专栏精选论文重点解读热点论文&#xff0c;围绕着行业实践和工程量产。若在某个环节出现卡点&#xff0c;可以回到大模型必备腔调或者LLM背后的基础模型重新阅读。而最新科技&#xff08;Mamba,xLSTM,KAN&#xff09;…

百度智能云千帆推出大模型普惠计划,0成本切换

百度智能云千帆推出大模型普惠计划&#xff0c;0成本切换至国内调用量第一的大模型平台。场景更丰富、模型更全面、工具链更完整易用、更安全可靠&#xff01; 即日起为新注册企业用户提供&#xff1a; 0元调用&#xff1a; 文心旗舰模型首次免费&#xff0c;赠送ERNIE3.5旗舰模…

Windows 根据github上的环境需求,安装一个虚拟环境,安装cuda和torch

比如我们在github上看到一个关于运行环境的需求 Installation xxx系统Python 3.xxx CUDA 9.2PyTorch 1.9.0xxxxxx 最主要的就是cuda和torch&#xff0c;这两个会卡很多环境的安装。 我们重新走一遍环境安装。 首先创建一个虚拟环境 conda create -n 环境名字 python3.xxx…

Vue介绍与入门(一篇入门)

Vue.js 是一个流行的 JavaScript 框架&#xff0c;专门用于构建用户界面和单页面应用程序。它简单易学&#xff0c;但功能强大&#xff0c;能够帮助开发者快速构建交互性强的 Web 应用。 本教程旨在帮助那些刚开始学习 Vue.js 的开发者快速入门&#xff0c;并掌握一些基础知识…

uni-app的showModal提示框,进行删除的二次确认,可自定义确定或取消操作

实现效果&#xff1a; 此处为删除的二次确认示例&#xff0c;点击删除按钮时出现该提示&#xff0c;该提示写在js script中。 实现方式&#xff1a; 通过uni.showModal进行提示&#xff0c;success为确认状态下的操作自定义&#xff0c;此处调用后端接口进行了删除操作&#…

网络爬虫中Xpath的使用方法

正则表达式虽然可以处理包含了诸如 HTML 或 XML 内容的字符串&#xff0c;但只能根据文本的 特征匹配字符串&#xff0c;而忽略字符串所包含的内容的真实格式。为了解决这个问题&#xff0c;Python 引入 XPath 以及支持 XPath 的第三方库 lxml&#xff0c;专门对 XML 或 HTML 格…

【LeetCode】一、数组相关(双指针算法 + 置换)

文章目录 1、算法复杂度1.1 时间复杂度1.2 空间复杂度 2、数组3、leetcode485&#xff1a;最大连续1的个数4、leetcode283&#xff1a;移动05、leetcode27&#xff1a;移除元素 1、算法复杂度 1.1 时间复杂度 算法的执行时间与输入值之间的关系&#xff08;看代码实际总行数的…

CMA软件测试报告对企业和用户有什么好处?

CMA是中国计量认证的简称&#xff0c;由省级以上人民政府计量行政部门对检测机构的检测能力及可靠性进行的一种全面的认证及评价&#xff0c;认证对象是所有对社会出具公正数据的产品质量监督检验机构及其它各类实验室&#xff0c;是需要强制性认证的资质。取得该资质认证的&am…

【深度强化学习】如何使用多进程(multiprocessing、pipe)来加速训练

文章目录 实验结果实现思路思路1思路2 进程与线程介绍如何实现multiprocessing、Pipe的范例关于时间对比上的问题代码修改收敛为何不稳定 技巧进程资源抢占问题线程问题cpu和gpu问题 进阶&#xff08;还没看懂/还没实验&#xff09;附代码raw代码mul代码 实验结果 实验平台&am…

Kali Linux渗透测试指南(详细教程,建议收藏)

渗透测试是对信息系统遭受实际攻击时的一种受控模拟&#xff0c;是安全中十分重要的一部分。 渗透测试人员往往会使用一些成熟的工具&#xff0c;只有全面掌握这些工具&#xff0c;我们才能更好地进行渗透。 今天就给大家分享一份Kali Linux高级渗透测试指南&#xff0c;一共…

google浏览器无法访问大端口的处理方式

属性的目标中添加后缀内容或者修改后台端口为常用端口&#xff0c;比如8080等。 “C:\Program Files\Google\Chrome\Application\chrome.exe” --explicitly-allowed-ports8888

YOLOv8+SwanHub+作物检测:从可视化训练到Demo演示

1. 项目介绍 本项目旨在利用先进的YOLOv8深度学习模型对麦穗进行高效、准确的检测。我们采用了GlobalWheat数据集&#xff0c;该数据集包含丰富的麦穗图像&#xff0c;为模型的训练提供了有力的数据支持。通过该实验&#xff0c;实现高准确率的麦穗识别&#xff0c;为农业生产提…

亮数据,一款新的低代码爬虫利器!

在当今数据驱动型时代&#xff0c;数据采集和分析能力算是个人和企业的核心竞争力。然而&#xff0c;手动采集数据耗时费力且效率低下&#xff0c;而且容易被网站封禁。 我之前使用过一个爬虫工具&#xff0c;亮数据&#xff08;Bright Data&#xff09; &#xff0c;是一款低…

LLM生成模型在生物蛋白质应用:ESM3

参考&#xff1a; https://github.com/evolutionaryscale/esm 通过GPT模型原理&#xff0c;输入蛋白质序列等模态输出预测的蛋白质序列及结构 使用 参考&#xff1a;https://colab.research.google.com/github/evolutionaryscale/esm/blob/main/examples/generate.ipynb#sc…