高通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.pswp.cn/diannao/38330.shtml
繁體地址,請注明出處:http://hk.pswp.cn/diannao/38330.shtml
英文地址,請注明出處:http://en.pswp.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…