Android11 系統/framework層禁止三方應用開機自啟動。

背景介紹:客戶給了定制的launcher,要求在設備上啟動他們的launcher,實現過程中出現的問題是 開機引導還沒走完,launcher就會自己彈出來打斷開機引導,按道理來說launcher是在開機引導結束后,由開機引導通過intent啟動才對。看了log之后發現是客戶launcher監聽了BOOT_COMPLETED廣播實現了開機自啟動導致了問題。

??像這種情況,開機引導還沒走完,客戶給的應用就開機自啟動了,肯定是不行的,我們怎么在framework層禁止呢?下面給出一種實際可行的修改方式。
注:Android 每個大版本斷層嚴重,本文章只針對Android 11 ,其它版本不一定適用,讀者需自己斟酌一下。類似的文章還有 Android系統層面限制應用開機自啟動詳解

一、分析過程

?? 做framework層的修改,最好的思路是 找到相關log——>找到相關代碼——>理解相關代碼——>修改相關邏輯實現需求。很多人會走錯路,一遇到問題就直接去搜某個模塊的代碼流程梳理博客來看,結果就是看半天看懵逼了,花了很多時間,結果還是不知道從何下手,浪費時間,原因是Android的代碼調用了太多層,像這種代碼啟動流程平時看看就可以了,但絕對不是一個合理的系統層開發手段。這些都是血淋淋的教訓,切記。 相關日志如下:

BroadcastQueue: Permission Denial: receiving Intent { act=android.intent.action.BOOT_COMPLETED flg=0x89000010 (has extras) }  to com.xinjing.hotel/com.mydlna.application.DmpBroadcastReceiver requires ...

??找到這段打印的位置:

frameworks\base\services\core\java\com\android\server\am\BroadcastQueue.javafinal void processNextBroadcastLocked(boolean fromMsg, boolean skipOomAdj) {. . . . . .. . . . . .. . . . . .perm = PackageManager.PERMISSION_DENIED;}if (perm != PackageManager.PERMISSION_GRANTED) {Slog.w(TAG, "Permission Denial: receiving "+ r.intent + " to "+ component.flattenToShortString()+ " requires " + requiredPermission+ " due to sender " + r.callerPackage+ " (uid " + r.callingUid + ")");. . . . . .. . . . . .. . . . . .

??看了一下附近的邏輯,BroadcastQueue是負責發送廣播的類,不管是系統還是上層應用發送廣播都會調用到它,這里的意思是com.xinjing.hotel 監聽了BOOT_COMPLETED廣播,給com.xinjing.hotel 發送,那么思路就來了,可不可以在這里做截斷呢?下面看看具體實現。

二、修改

??在代碼如下位置加入注釋//xuhao之間的代碼即可。

frameworks\base\services\core\java\com\android\server\am\BroadcastQueue.javafinal void processNextBroadcastLocked(boolean fromMsg, boolean skipOomAdj) {. . . . . .. . . . . .. . . . . .ResolveInfo info = (ResolveInfo)nextReceiver;ComponentName component = new ComponentName(info.activityInfo.applicationInfo.packageName,info.activityInfo.name);	//xuhaoif(component.flattenToShortString().contains("com.xinjing.hotel")) {Slog.w(TAG,"component.flattenToShortString "+component.flattenToShortString());Slog.w(TAG,"r.intent.toString "+r.intent.toString());}if(component.flattenToShortString().contains("com.xinjing.hotel")) {if(r.intent.toString().contains("android.intent.action.BOOT_COMPLETED") || r.intent.toString().contains("android.intent.action.MEDIA_MOUNTED") ){Slog.w(TAG,"tongzhouzhixing return");return;}}//xuhao       

??上述代碼修改解釋:客戶給的launcher com.xinjing.hotel,開機自啟動監聽了兩個廣播android.intent.action.BOOT_COMPLETED、android.intent.action.MEDIA_MOUNTED,屏蔽掉即可禁止該應用開機自啟動。

三、思維發散

??上述的方案不完美但是可用,完美的方案是開機引導結束后設置一個系統屬性為1,該屬性初始值為0,偽代碼如下:

        if(component.flattenToShortString().contains("com.xinjing.hotel")&& persisit.me.xuhao == 0) {if(r.intent.toString().contains("android.intent.action.BOOT_COMPLETED") || r.intent.toString().contains("android.intent.action.MEDIA_MOUNTED") ){Slog.w(TAG,"tongzhouzhixing return");return;}}

??這樣能保證只在開機引導沒完成前對應用有限制,完成后不對應用限制,邏輯得到完善。開發時間急就用上面現成的,不急就完善下。
??這個地方還可以做成讀取配置文件的方式,xml里配置一堆需要禁止開機自啟動的應用,這里讀取xml文件解析,在開機引導沒有完成前對所有xml中的APP做出限制,客戶需求大的話,這樣做最好。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/web/39598.shtml
繁體地址,請注明出處:http://hk.pswp.cn/web/39598.shtml
英文地址,請注明出處:http://en.pswp.cn/web/39598.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

偏微分方程筆記(駐定與非駐定問題)

橢圓方程可以看成拋物方程 t → ∞ t\rightarrow\infty t→∞的情況。 拋物: 雙曲:

什么是deep supervision?

Deep supervision 是深度學習中的一種技術,通常用于改進模型訓練的效果,尤其是在訓練深度神經網絡時。它通過在模型的多個中間層添加輔助監督信號(即額外的損失函數)來實現。這種方法有助于緩解梯度消失問題,加速收斂&…

DolphinDB 蟬聯 Gartner 中國實時數據管理代表廠商

報!DolphinDB 又上榜啦!!! 上月,全球知名信息技術研究公司 Gartner 發布了 Hype Cycle for Data, Analytics and AI in China, 2024 報告,以技術成熟度曲線(Hype Cycle)和優先級矩陣…

【NLP學習筆記】load_dataset加載數據

除了常見的load_dataset(<hf上的dataset名>)這種方式加載HF上的所有數據外&#xff0c;還有其他custom的選項。 加載HF上部分數據 from datasets import load_dataset c4_subset load_dataset("allenai/c4", data_files"en/c4-train.0000*-of-01024.js…

Spring Boot集成多數據源的最佳實踐

Spring Boot集成多數據源的最佳實踐 大家好&#xff0c;我是免費搭建查券返利機器人省錢賺傭金就用微賺淘客系統3.0的小編&#xff0c;也是冬天不穿秋褲&#xff0c;天冷也要風度的程序猿&#xff01; 為什么需要多數據源&#xff1f; 在實際的應用開發中&#xff0c;有時候…

【C++ Primer Plus學習記錄】函數和C-風格字符串

將字符串作為參數時意味著傳遞的是地址&#xff0c;但可以使用const來禁止對字符串參數進行修改。 假設要將字符串作為參數傳遞給函數&#xff0c;則表示字符串的方式有三種&#xff1a; &#xff08;1&#xff09;char數組 &#xff08;2&#xff09;用引號括起來的字符串常…

航空數據管控系統-②項目分析與設計:任務1:需求分析-項目場景引入

任務描述 知識點&#xff1a;需求分析 重 點&#xff1a;原型設計工具&#xff0c;用例圖&#xff0c;流程圖繪制工具 難 點&#xff1a;功能點的梳理 內 容&#xff1a;完成本次實訓項目的需求分析 先共同討論處本項目的主要功能模塊&#xff0c;并確定每個模塊的負責…

通過卷防水上限,解鎖手機的新玩法?IP68之間亦有不同

當手機的日常防水已經成了基本功&#xff0c;防水能力的上限便成了新的賽道。 畢竟再謹慎的人&#xff0c;也可能會有手滑的時候。這個時候&#xff0c;一臺有著IP68級防水的手機&#xff0c;就能給你提供一份安心。 【IP68是標準上限&#xff0c;不是手機防水上限】 IP68是…

JAVA學習筆記2

一、加號使用 二、數據類型 bit&#xff1a;計算機中的最小存儲單位 byte(字節):計算機中基本存儲單元&#xff0c;1byte8bit 浮點數符號位指數位尾數位 浮點數默認為double類型

2024亞太杯中文賽B題全保姆教程

B題 洪水災害的數據分析與預測 問題 1. 請分析附件 train.csv 中的數據&#xff0c;分析并可視化上述 20 個指標中&#xff0c;哪 些指標與洪水的發生有著密切的關聯&#xff1f;哪些指標與洪水發生的相關性不大&#xff1f;并 分析可能的原因&#xff0c;然后針對洪水的提前預…

Teamviewer刪除可信任設備

目前基本上主流的遠程連接軟件都有限制&#xff0c;要么收費&#xff1b; Teamviewer可信任設備有限&#xff0c;超出限制就會提示錯誤&#xff0c;需要刪除多余的設備才能登陸賬號&#xff01; 需要登陸這個網站 Teamviewer Management console&#xff0c;才能修改&#xff…

基于 STM32 的智能睡眠呼吸監測系統設計

本設計的硬件構成&#xff1a; STM32F103C8T6單片機最小系統板&#xff08;包含3.3V穩壓電路時鐘晶振電路復位電路&#xff08;上電自復位&#xff0c;手動復位&#xff09;&#xff09;&#xff0c;心率傳感器、氣壓傳感器、液晶顯示、按鍵、蜂鳴器、LED燈、藍牙模塊組合而成…

【C++/STL深度剖析】priority_queue 最全解析(什么是priority_queue? priority_queue的常用接口有哪些?)

目錄 一、前言 二、如何區分【優先級隊列】與【隊列】&#xff1f; 三、priority_queue的介紹 四、priority_queue 的構造 五、priority_queue 的常用接口 &#x1f4a7;push &#x1f4a7;pop &#x1f4a7;size &#x1f4a7;top &#x1f4a7;empty &…

YOLOv5改進 | 損失函數 | EIoU、SIoU、WIoU、DIoU、FocuSIoU等多種損失函數

秋招面試專欄推薦 &#xff1a;深度學習算法工程師面試問題總結【百面算法工程師】——點擊即可跳轉 &#x1f4a1;&#x1f4a1;&#x1f4a1;本專欄所有程序均經過測試&#xff0c;可成功執行&#x1f4a1;&#x1f4a1;&#x1f4a1; 專欄目錄&#xff1a; 《YOLOv5入門 …

Nginx-rewrite模塊詳解

文章目錄 前言一、ngx_http_rewrite_module模塊二、指令詳解1.break案例 2. if指令案例 3. return指令案例&#xff1a;return 的優先級 4. rewrite指令案例 5. set指令 總結 前言 nginx一些場景&#xff0c;我們需要使用rewrite模塊。例如域名改了&#xff0c;為了利用網站se…

什么是YUV和IPB,PTS和DTS,視頻編碼解碼過程

YUV 是一種在視頻處理和壓縮中常用的顏色空間。 它將圖像的亮度 (Y) 與色度 (U 和 V) 成分分開。 這種分離對視頻壓縮和廣播非常有益&#xff0c; 因為人眼對亮度變化比對顏色變化更敏感。 YUV 組件簡介 Y (亮度)&#xff1a;表示圖像的亮度或灰度信息。U (色度)&#xff1a;…

git - 變基、合并、重置后的回退操作

介紹 ORIG_HEAD 是 Git 中一個特殊的引用&#xff0c;用來指向某些操作&#xff08;如合并、變基、重置等&#xff09;前的狀態。它可以用來快速恢復到這些操作之前的狀態。下面是 ORIG_HEAD 的用法和一些常見的使用場景&#xff1a; 用法 1. 查看 ORIG_HEAD 使用以下命令查…

程序員需要具備的核心競爭力

隨著IT人才的飽和&#xff0c;互聯網就業形勢越嚴峻。 作為一名工程師&#xff0c;需要具備哪些基本素養與能力&#xff0c;才能夠應對這樣的就業環境&#xff1f; 按照優先級排序如下&#xff1a; 1 業務理解、需求溝通能力 業務理解與需求溝通看似是技術經理、架構師需要…

四模衛星導航模塊-高精度多模衛星定位技術

GPS02-UBX模塊是思為無線基于u-blox最新款IC M10系列研發的一款全球衛星系統定位GPS/北斗模塊。它可以支持BDS/GPS/GLONASS/Galileo四模定位(四選三&#xff0c;BDS和GLONASS不能同時使用)。GPS02-UBX模塊能看到更多的衛星&#xff0c;有著更高的靈敏度&#xff0c;從而為用戶獲…

大模型日報 2024-07-04

大模型日報 2024-07-04 一、大模型資訊 大廠高管轉戰 AI 創業盤點&#xff1a;超 25 人&#xff0c;覆蓋全產業鏈&#xff0c;AI 應用最熱門 涉及多家互聯網大廠高管加入生成式 AI 創業&#xff0c;涵蓋多個領域及融資情況。 騰訊云發布自研大數據高性能計算引擎 Meson 軟硬一體…