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

  写这篇文章的原因是解决了一个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() {@Overridepublic 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.rebuildprivate 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.mzph.cn/web/34027.shtml

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

相关文章

【SpringBoot文件压缩下载】文件夹压缩下载

1. Controller 使用hutool的ZipUtil根据文件夹路径打包成File对象然后调用自定义的FileResponseUtil进行单线程数据传输 import cn.hutool.core.date.DateUtil; import com.github.xiaoymin.knife4j.annotations.ApiSort; import im.gy.zfile.core.util.FileResponseUtil; im…

腰背肌筋膜炎的症状及治疗

腰背肌筋膜炎的症状 一、疼痛特点&#xff1a; 主要表现为腰背部弥漫性钝痛&#xff0c;尤以两侧腰肌及髂嵴上方更为明显。疼痛特点为晨起痛&#xff0c;日间轻&#xff0c;傍晚复重。长时间不活动或活动过度均可诱发疼痛&#xff0c;病程长&#xff0c;且因劳累及气候变化而发…

微信小程序封装请求API-promise格式

微信小程序原生的请求API就是wx.request wx.request({url: example.php, //仅为示例&#xff0c;并非真实的接口地址data: {x: ,y: },header: {content-type: application/json // 默认值},success (res) {console.log(res.data)} })有时候不能很好的适配我们的开发需求&#…

通过Nginx实战讲解HTTP的301和302状态码的区别

通过Nginx实战讲解HTTP的301和302状态码的区别 1. 简介2. 301永久重定向3. 302临时重定向1. 简介 HTTP状态码中,301和302都是网页重定向跳转。301重定向是一种永久重定向,而302跳转是暂时的跳转    ● 为什么需要重定向:    网站是会被大量用户收藏在自己的浏览器收藏夹…

小红书营销:解锁企业增长新引擎,与小红书集成实现精准获客

在数字化营销的新时代&#xff0c;小红书以其独特的社区文化和精准的用户定位&#xff0c;成为了品牌和企业争相入驻的热门平台。今天将探讨如何通过小红书平台进行营销获客&#xff0c;并强调与企业集成的重要性&#xff0c;以实现更高效的品牌增长。 一、小红书营销的独特优…

基于 MHA 的 MySQL 高可用主从架构

Author&#xff1a;Arsen Date&#xff1a;2024/06/25 目录 一、前言1.1 概述1.2 组件1.3 流程 二、环境三、部署3.1 基本环境3.1.1 hosts 配置3.1.2 配置 SSH 免密访问 3.2 MySQL 主从3.2.1 基础环境配置3.2.2 启动 MySQL 实例3.2.3 配置 MySQL 主从3.2.4 MySQL 主从同步验证 …

Calibre - 合并电子书(EpubMerge)

这里使用 Calibre 软件和 EpubMerge 插件 EpubMerge github &#xff1a; https://github.com/JimmXinu/EpubMerge 1、安装 Merge 插件 安装后需要重启 calibre 2、查看设置 4 3、选中文件、开始合并 合并完成后&#xff0c;会弹窗窗口&#xff0c;来编辑 合辑的元信息 完成…

基于python的随机森林多分类模型

1.随机森林多分类模型 1.1 基本原理 随机森林&#xff08;Random Forest&#xff09;是一种基于决策树的集成学习方法&#xff0c;它通过将多个决策树进行组合&#xff0c;以投票或平均的方式得到最终的预测结果。在多分类问题中&#xff0c;随机森林通过构建多个决策树&#…

开发RpcProvider的网络服务

首先更改src的CMakeLists.txt的内容为&#xff1a; #当前目录的所有源文件放入SRC_LIST aux_source_directory(. SRC_LIST)#生成SHARED动态库 #add_library(mprpc SHARED ${SRC_LIST})#由于muduo是静态库&#xff0c;为了使用muduo&#xff0c;将mprpc也生成为静态库 add_libr…

A股周一走势历史罕见,你知道是为什么吗?

今天的A股&#xff0c;让人历史罕见&#xff0c;你知道是为什么吗&#xff1f;盘面出现2个重要信号&#xff0c;一起来看看&#xff1a; 1、今天大盘低开低走&#xff0c;跌懵了&#xff0c;两市板块全部在等待翻红&#xff0c;这让人历史罕见。 2、盘面出现2个重要信号&#x…

java —— 网络编程(UDP)

一、InetAddress 类 InetAddress address1InetAddress.getLocalHost(); 该命令用于获取本机主机信息&#xff0c;返回主机名与 IP 地址&#xff0c;不过如果本机有多个网卡的话&#xff0c;返回的 IP 地址并不一定是目前正在联网的那个。 InetAddress address2InetAddress.g…

【计算机毕业设计】167校园失物招领微信小程序

&#x1f64a;作者简介&#xff1a;拥有多年开发工作经验&#xff0c;分享技术代码帮助学生学习&#xff0c;独立完成自己的项目或者毕业设计。 代码可以私聊博主获取。&#x1f339;赠送计算机毕业设计600个选题excel文件&#xff0c;帮助大学选题。赠送开题报告模板&#xff…

办公人导航-上网导航,找网站,下软件,找资源!

办公人导航是一个专门为办公人员设计的实用导航网站&#xff0c;旨在帮助用户高效地找到各种优质的办公资源和工具。无论是需要查找办公软件、学习资源还是娱乐工具&#xff0c;在办公人导航上都能找到你需要的内容。 办公人导航-实用的办公生活导航网站&#xff01;https://ww…

PADS系列:如何导入元件库新建元件

对于普通的原理图&#xff0c;位置的摆放是比较随意的&#xff0c;并且也没有一些特殊的或者元件库里面没有的元件&#xff0c;相对来说绘制会比较简单。但是如果碰上复杂一点的电路&#xff0c;要绘制起来就会比较麻烦&#xff0c;需要一些新的PADS使用技巧&#xff0c;最基础…

详解HTTP:HTTP/1.1哪些可以优化

随着互联网的发展和应用的不断丰富&#xff0c;HTTP&#xff08;超文本传输协议&#xff09;作为网络通信的核心协议&#xff0c;承载着越来越重的流量和复杂的交互任务。虽然HTTP/1.1已经在很长一段时间内支撑着互联网的繁荣&#xff0c;但它本身也存在一些性能上的瓶颈和不足…

python format变量里有大括号报错

aa"{\"0\":{\"name\":\"0\",\"all\":{}}}".format(aa)本来想给all赋值为aa 报错 >>> aa"{\"0\":{\"name\":\"0\",\"all\":{}}}".format(aa) Traceback (most …

k8s设置pod资源请求和限制

设置资源请求和限制 实验目标&#xff1a; 学习如何为 Pod 设置资源请求和限制&#xff0c;以优化集群资源分配。 实验步骤&#xff1a; 创建一个 Deployment&#xff0c;并设置 CPU 和内存的资源请求和限制。使用 kubectl describe 命令查看资源分配情况。观察资源限制对 P…

全球首个数字人开源了

DUIX&#xff08;Dialogue User Interface System&#xff09;是硅基智能打造的AI数字人智能交互平台。通过将数字人交互能力开源&#xff0c;开发者可自行接入多方大模型、语音识别&#xff08;ASR&#xff09;、语音合成&#xff08;TTS&#xff09;能力&#xff0c;实现数字…

JAVA8--Stream了解

1. Stream概述 Java8中有两大最为重要的特性。 1)Lambda 表达式&#xff0c;前面文章已经介绍过了 2)Stream API (java.util.stream.*包下) 说到Stream便容易想到I/O Stream&#xff0c;而实际上我们这里讲的Stream它是Java8中对数据处理的一种抽象描述&#xff1b; 我们可…

apscheduler任务编排

一、形式一&#xff1a;A任务完成后添加B任务 from apscheduler.schedulers.background import BackgroundScheduler from datetime import datetime, timedelta# 定义任务A def task_A():print("任务A开始执行:", datetime.now())# 模拟一些耗时操作# ...print(&q…