高通Android 12 /13根据包名授权悬浮窗权限

    代码路径frameworks/base/service/core/com/android/server/policy/PhoneWindowManager.java 
1、 PhoneWindowManager.java中关于根据包名实现悬浮窗权限授权的功能实现
在实现根据包名授予悬浮窗权限的核心的功能开发中,在通过上述的功能原理实现的过程中分析得知,在系统核心服务启动完毕以后,就需要在  
  PhoneWindowManager.java中的systemReady()中来添加默认授权的相关方法,接下来看下具体的实现过程

```/** {@inheritDoc} */@Overridepublic void systemReady() {// In normal flow, systemReady is called before other system services are ready.// So it is better not to bind keyguard here.mKeyguardDelegate.onSystemReady();mVrManagerInternal = LocalServices.getService(VrManagerInternal.class);if (mVrManagerInternal != null) {mVrManagerInternal.addPersistentVrModeStateListener(mPersistentVrModeListener);}readCameraLensCoverState();updateUiMode();mDefaultDisplayRotation.updateOrientationListener();synchronized (mLock) {mSystemReady = true;mHandler.post(new Runnable() {@Overridepublic void run() {updateSettings();}});// If this happens, for whatever reason, systemReady came later than systemBooted.// And keyguard should be already bound from systemBootedif (mSystemBooted) {mKeyguardDelegate.onBootCompleted();}}mAutofillManagerInternal = LocalServices.getService(AutofillManagerInternal.class);mGestureLauncherService = LocalServices.getService(GestureLauncherService.class);+ allowAppSystemAlertWindowPermission("包名") ;}
```

2、在实现根据包名授予悬浮窗权限的核心的功能开发中,可以在PhoneWindowManager这里增加授权悬浮窗权限的方法,来实现授权悬浮窗的功能,具体实现如下  
 增加授权悬浮窗的方法如下:

```public void allowAppSystemAlertWindowPermission(String pkg) throws RemoteException {final long ident = Binder.clearCallingIdentity();try {if (!TextUtils.isEmpty(pkg)) {Log.e(TAG, "allowAppSystemAlertWindowPermission pkg:" + pkg);AppOpsManager mAppOpsManager = (AppOpsManager) mContext.getSystemService(Context.APP_OPS_SERVICE);PackageManager packageManager = mContext.getPackageManager();ApplicationInfo applicationInfo = packageManager.getApplicationInfo(pkg, PackageManager.GET_ACTIVITIES);mAppOpsManager.setMode(AppOpsManager.OP_SYSTEM_ALERT_WINDOW, applicationInfo.uid, pkg, AppOpsManager.MODE_ALLOWED);}} catch (PackageManager.NameNotFoundException e) {e.printStackTrace();} finally {Binder.restoreCallingIdentity(ident);}}```

3、如果你想要增加MDM系统控制接口也可以,增加一个aidl接口,然后执行make update-api 更新aidl接口(不知道增加aidl接口或者不知道添加源码路径可以参考我之前这篇文章高通 Android 12 源码编译aidl接口_安卓12 怎么写aidl-CSDN博客),然后在对应自定义系统服务中调用allowAppSystemAlertWindowPermission方法,也可以实现此功能,同样第三方应用SampleCode去调用自定义系统服务方法,也可以实现授权悬浮窗权限哈。需要系统签名哈!

 android:sharedUserId="android.uid.system"

4、在app Sample应用申请此悬浮窗权限,只能通过判断当前sdk版本号如下代码所示,但是需要在 AndroidManifest.xml 中添加悬浮窗权限 如下所示。

<uses-permission android:name="android.permission.SYSTEM_ALERT_WINDOW" />
其他伪代码如下所示,仅供参考哈
package xxx;import android.content.Intent;
import android.net.Uri;
import android.os.Bundle;
import android.provider.Settings;import androidx.appcompat.app.AppCompatActivity;public class MainActivity extends AppCompatActivity {private static final int REQUEST_CODE_OVERLAY_PERMISSION = 200;@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {if (!Settings.canDrawOverlays(this)) {// 权限未授予,需要请求权限Intent intent = new Intent(Settings.ACTION_MANAGE_OVERLAY_PERMISSION,Uri.parse("package:" + getPackageName()));startActivityForResult(intent, REQUEST_CODE_OVERLAY_PERMISSION);} else {// 权限已经被授予,执行相应操作}}
}@Overrideprotected void onActivityResult(int requestCode, int resultCode, Intent data) {super.onActivityResult(requestCode, resultCode, data);if (requestCode == REQUEST_CODE_OVERLAY_PERMISSION) {if (Settings.canDrawOverlays(this)) {// 权限已经被用户授予,可以执行需要的操作} else {// 用户拒绝了权限请求,可以相应地处理}}}
}

  这里只是简单记录下,转载请注明出处高通Android 12 /13根据包名授权悬浮窗权限-CSDN博客,谢谢! 

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

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

相关文章

EigenLayer 生态解析-再质押与 AVS 崛起

基于以太坊网络的再质押协议 EigenLayer 提出了利用为以太坊网络验证而质押的 ETH 来与其他协议共享安全性和资本效率,同时为协议参与者提供额外利息。在 AVS、再质押、积分系统等概念的推动下,逐渐形成一个庞大的生态系统,从 2024 年初到现在 EigenLayer 的 TVL 增加了 12 …

5.Spring IOC 循环依赖问题源码深度剖析

Spring IOC 容器解决循环依赖问题主要涉及到几个关键的缓存和对象创建过程中的处理逻辑。以下是对循环依赖问题进行深度剖析的概述&#xff1a; 循环依赖的背景 循环依赖发生在两个或多个Bean相互依赖对方&#xff0c;形成一个闭环。这可能是直接的&#xff0c;比如Bean A依赖B…

全球最大智能立体书库|北京:3万货位,715万册,自动出库、分拣、搬运

导语 大家好&#xff0c;我是社长&#xff0c;老K。专注分享智能制造和智能仓储物流等内容。 新书《智能物流系统构成与技术实践》 北京城市图书馆的立体书库采用了先进的WMS&#xff08;仓库管理系统&#xff09;和WCS&#xff08;仓库控制系统&#xff09;&#xff0c;与图书…

Linux磁盘监控思路分析

磁盘监控原理 设备又名I/O设备&#xff0c;泛指计算机系统中除主机以外的所有外部设备。 1.1 计算机分类 1.1.1 按照信息传输速度分&#xff1a; 1.低速设备&#xff1a;每秒传输信息仅几个字节或者百个字节&#xff0c;如&#xff1a;键盘、鼠标等 2.中速设备&#xff1a…

leetCode.98. 验证二叉搜索树

leetCode.98. 验证二叉搜索树 题目描述 代码 /*** Definition for a binary tree node.* struct TreeNode {* int val;* TreeNode *left;* TreeNode *right;* TreeNode() : val(0), left(nullptr), right(nullptr) {}* TreeNode(int x) : val(x), left(n…

100张linux C/C++工程师面试高质量图

文章目录 杂项BIOSlinux开机启动流程内核启动流程网络编程网络编程流程tcp状态机三次握手四次断开reactor模型proactor模型select原理poll原理epoll原理文件系统虚拟文件系统文件系统调用阻塞IO非阻塞IO异步IO同步阻塞同步非阻塞IO多路复用进程管理进程状态程序加载内存管理MMU…

力扣(2024.06.30)

1. 81——搜索旋转排序数组2 已知存在一个按非降序排列的整数数组 nums &#xff0c;数组中的值不必互不相同。 在传递给函数之前&#xff0c;nums 在预先未知的某个下标 k&#xff08;0 < k < nums.length&#xff09;上进行了旋转&#xff0c;使数组变为 [nums[k], n…

vue响应式原理细节分享

在讲解之前&#xff0c;我们先了解一下数据响应式是什么&#xff1f;所谓数据响应式就是建立响应式数据与依赖&#xff08;调用了响应式数据的操作&#xff09;之间的关系&#xff0c;当响应式数据发生变化时&#xff0c;可以通知那些使用了这些响应式数据的依赖操作进行相关更…

前端:多服务端接口资源整合与zip打包下载

项目需求 前端项目开发中,有一个页面需要去整合多个服务接口返回的数据资源,并且需要将这多个服务接口接口返回的数据进行资源压缩,最终打包成zip压缩包,并在客户端完成下载。 基本需求梳理如下, 实现思路 这个需求点其实本质上还是传统的“文件下载”功能需求,常见的例如…

Python使用defaultdict简化值为list的字典

原始代码&#xff1a; from typing import Dictrelated_objects_for_fetch: Dict[str, list] {}for key, value in [(k1, v1), (k1, v2), (k2, v2), (k3, v3), (k2, v2)]:if key not in related_objects_for_fetch:related_objects_for_fetch[key] []if value not in (value…

贪心问题(POJ1700/1017/1065)(C++)

一、贪心问题 贪心算法 贪心算法&#xff08;greedy algorithm&#xff09;&#xff0c;是用计算机来模拟一个「贪心」的人做出决策的过程。这个人十分贪婪&#xff0c;每一步行动总是按某种指标选取最优的操作。而且他目光短浅&#xff0c;总是只看眼前&#xff0c;并不考虑…

第三天:LINK3D核心原理讲解【第1部分】

第三天:LINK3D核心原理讲解 LINK3D学习笔记 目标 了解LINK3D velodyne64线激光雷达LINK3D质心点提取效果: 分布在车道与墙体的交界处。 课程内容 LINK3D论文精讲LINK3D聚合关键点提取代码讲解LINK3D描述子匹配代码讲解除了ALOAM的线特征、面特征,还有其他点云特征吗,是…

如何使用 Postgres 折叠您的堆栈 实现一切#postgresql认证

技术蔓延如何蔓延 假设您正在开发一款新产品或新功能。一开始&#xff0c;您的团队会列出需要解决的技术问题。有些解决方案您将自行开发&#xff08;您的秘诀&#xff09;&#xff0c;而其他解决方案您将使用现有技术&#xff08;可能至少包括一个数据库&#xff09;来解决。…

人工智能期末复习笔记(更新中)

分类问题 分类&#xff1a;根据已知样本的某些特征&#xff0c;判断一个新的样本属于哪种已知的样本类 垃圾分类、图像分类 怎么解决分类问题 分类和回归的区别 1. 逻辑回归分类 用于解决分类问题的一种模型。根据数据特征或属性&#xff0c;计算其归属于某一类别 的概率P,…

ComfyUI局部重绘的四种方式 (附件工作流在最后)

前言 局部重绘需要在图片中选择重绘区域&#xff0c;点击图片右击选择Open in MaskEditor&#xff08;在蒙版编辑器中打开&#xff09;&#xff0c;用鼠标描绘出需要重绘的区域 方式一&#xff1a;重绘编码器 这种方式重绘比较生硬&#xff0c;需要额外搭配使用才行 方式二&…

el-upload 上传图片及回显照片和预览图片,文件流和http线上链接格式操作

<div v-for"(info, index) in zsjzqwhxqList.helicopterTourInfoList" :key"info.id" >编辑上传图片// oss返回线上地址http链接格式&#xff1a;<el-form-itemlabel"巡视结果照片":label-width"formLabelWidth"><el…

Cyber Weekly #13

赛博新闻 1、谷歌发布最强开源小模型Gemma-2 本周五&#xff08;6月28日&#xff09;凌晨&#xff0c;谷歌发布最强开源小模型Gemma-2&#xff0c;分别为9B&#xff08;90亿&#xff09;和27B&#xff08;270亿&#xff09;参数规模&#xff0c;其中9B 模型在多项基准测试中均…

颍川韩氏,来自战国七雄韩国的豪族

颍川是战国七雄韩国故土&#xff0c;韩国被秦国灭国后&#xff0c;王公贵族们除了坚决反秦的被杀了外&#xff0c;大部分都留存了下来。这些人在楚、汉反秦战争中&#xff0c;成为反秦统一战线的重要力量&#xff0c;其中两人先后被封为重新恢复的韩国的国王。 一个是横阳君韩…

Windows系统下,将nginx注册为本地服【亲测可用】

在Windows系统下&#xff0c;将nginx注册为本地服务并设置为开机自动运行&#xff0c;可以通过以下步骤进行&#xff1a; 下载Windows Service Wrapper&#xff1a; 访问 WinSW 项目页面&#xff0c;下载适用于Windows的版本。 准备nginx&#xff1a; 确保你已经下载并解压了n…

共有5部手机,如果通过服务器让1号手机执行打开 “闲鱼.js“ 脚本

1.手机端Auto.js脚本&#xff1a; 每部手机需要在连接时发送一个唯一的标识符&#xff08;如设备ID&#xff09;&#xff0c;并接收服务器发送的指令以执行指定的脚本。 // Auto.js脚本连接WebSocket服务器并发送设备ID var WebSocket require(ws); var ws new WebSocket(w…