Android各版本差異性

Android各版本差異性

Android?6(api?23)

  • 指紋識別

  • 運行時權限:動態申請(重點)

  • 移除對Apache?HTTP?client的支持,建議使用HttpURLConnection。

  • 休眠和應用待機模式(Doze?and?App?Standby)

  • 硬件標識符訪問權:WifiInfo.getMacAddress()?返回常量值?02:00:00:00:00:00

Android7(api?24)

  • 應用間共享文件規則

    • 禁止使用file://URI,?否則拋出FileUriExposedException異常應該通過content://URI,并授權URI?臨時訪問權限

    • FileProvider

  • Apk簽名Scheme?V2

    • V1簽名不會校驗Apk文件的注釋區V2簽名會校驗Apk文件的注釋區是否修改V2簽名增加一塊簽名區塊,簽名區塊可以根據固定的id,獲取簽名信息簽名區塊不會校驗是否修改
  • 畫中畫、分屏多任務、通知欄快速回復、夜間模式

  • 后臺優化:

    • 刪除3個隱式廣播(CONNECTIVITY_ACTION、ACTION_NEW_PICTURE、ACTION_NEW_VIDEO)

Android8(api?26)

  • 運行時權限:系統只會授予應用明確請求的權限

  • 通知變更(channel)

  • 自適應圖標

  • 懸浮窗適配

  • 透明主題的Activity:8.0上的Bug?:?只有全屏不透明的Activity才可以設置方向?;?8.1修復

  • 后臺服務、廣播限制規則;

    • 1.后臺服務限制處于空閑狀態時,應用可以使用的后臺服務存在限制。?這些限制不適用于前臺服務,因為前臺服務更容易引起用戶注意

    • 2.廣播限制除了有限的例外情況,無法再使用清單注冊隱式廣播

  • 后臺位置信息限制

    • 為降低耗電量,8.0開始對后臺應用獲取用戶當前位置信息的頻率進行限制,應用每小時僅能接收幾次位置信息更新,會出現后臺應用定位收不到定位信息。

Android9(api?28)

  • 新特性

    • 劉海屏的支持

    • 利用?Wi-Fi?RTT?進行室內定位

    • 通知欄功能增強(支持Bubble)

    • 多攝像頭支持

  • Non-SDK接口使用

    • 9.0開始,無法再通過反射,JNI間接地使用非SDK的API接口了
  • 挖孔屏適配

    • 有狀態欄的頁面,不會受挖孔屏特性的影響全屏顯示的頁面,系統挖孔屏方案會把應用界面下移,避開挖空區域,進行顯示
  • 不允許共享WebView數據目錄

    • 不能再跨進程共享單個WebView數據目錄,否則會崩潰
  • 移除對?Build.serial?的直接訪問

    • 需要?Build.serial屬性字段的話,必須請求?READ_PHONE_STATE?權限然后使用?9.0?新增的新?Build.getSerial()?函數來進行獲取
  • SELinux?禁止訪問應用的數據目錄

    • 不允許直接通過路徑訪問其他應用的數據目錄

    • 可以使用進程間通信?(IPC)?機制(包括通過傳遞?FD)共享數據

Android?10?(?api29)

  • 定義媒體權限集合

  • 訪問共享集合,需通過?MediaStore?API

    • MediaStore.ImagesMediaStore.VideoMediaStore.AudioMediaStore.Downloads
  • 應用的私有目錄訪問變更

    • 為每個應用程序提供了一個獨立的在外部存儲設備的存儲沙箱,沒有其他應用可以直接訪問您應用的沙盒文件。由于文件是私有的,因此訪問這些文件不再需要任何權限。

    • 獲取外部存儲私有文件的最佳位置:即Context.getExternalFilesDir返回的位置,因為此位置在所有Android版本中表現一致;使用此方法時,請傳入與要創建或打開的文件類型對應的媒體環境。例如,要訪問或保存app-private圖像,請調用Context.getExternalFilesDir(Environment.DIRECTORY_PICTURES)

  • ACCESS_MEDIA_LOCATION

    • 使用這個權限,可以獲取照片中的位置信息
  • Activity后臺活動限制

    • 對應用未經通知用戶就啟動App,進行了極大地限制,只有在滿足以下一個或多個條件時才能啟動Activity:

    • 1.?App具有可見Activity窗口

    • 2.位于前臺的另一個App發送屬于該應用程序的PendingIntent

    • 3.系統發送屬于該App的PendingIntent?(比如:點擊通知消息)

    • 4.系統向應用程序發送廣播?(比如:SECRET_CODE_ACTION)

  • 設備位置權限的訪問控制

    • 用戶可以更好地控制應用何時可以訪問設備位置,運行的應用程序請求位置訪問時,會通過對話框的形式給用戶進行授權提示。
  • 允許應用程序降級

  • 對數據和標識符的更改

    • 1.獲取聯系人信息,結果不再按交互頻率排序

    • 2.MAC地址隨機化,默認傳輸隨機的MAC?地址

    • 3.唯一標識符:需要?READ_PRIVILEGED_PHONE_STATE?權限,才能訪問設備的不可重置標識符,包括?IMEI、序列號

    • 4.訪問剪貼板數據:除默認輸入法程序外,沒有焦點的應用無法訪問剪貼板數據?:?clipManager.hasPrimaryClip?return?false

    • 5.訪問USB串行需要用戶許可:只能在用戶授予您訪問USB設備權限后才能讀取序列號

    • 6.相機和連接相關更改:調用getCameraCharacteristics()方法獲取返回的信息的廣度,必須具有?CAMERA?權限才能訪問getCameraCharacteristics()方法的返回值中包含的設備元數據

  • 啟用、禁用Wi-Fi的限制

    • 1.無法啟用、停用Wi-Fi2.WifiManager.setWifiEnabled()?方法始終返回false3.只能使用設置面板提示用戶啟用、禁用Wi-Fi

Android?11(api?30)

  • 分區存儲強制執行

    • 分區存儲,在Android10就已經推行了,簡單的說,就是應用對于文件的讀寫只能在沙盒環境,也就是屬于自己應用的目錄里面讀寫。其他媒體文件可以通過MediaStore進行訪問。
  • 媒體文件訪問權限

    • 為了在保證用戶隱私的同時可以更輕松地訪問媒體,Android?11?增加了以下功能。執行批量操作和使用直接文件路徑和原生庫訪問文件
  • 軟件包可見性

    • 如果你想去獲取其他應用的信息,比如包名,名稱等等,不能直接獲取了,必須必須在清單文件中添加元素,告知系統你要獲取哪些應用信息或者哪一類應用
  • 所有文件訪問權限

    • 應用可通過執行以下操作,向用戶請求名為“所有文件訪問權限”的特殊應用訪問權限,在清單中聲明MANAGE_EXTERNAL_STORAGE權限,使用ACTION_MANAGE_ALL_FILES_ACCESS_PERMISSION?作為Action,?將用戶引導至一個系統設置頁面,在該頁面上,用戶可以為您的應用啟用以下選項:授予所有文件的管理權限。如需確定您的應用是否已獲得?MANAGE_EXTERNAL_STORAGE?權限,請調用Environment.isExternalStorageManager()。
  • 電話號碼相關權限

    • TelecomManager?類中的?getLine1Number()?方法TelecomManager?類中的?getMsisdn()?方法當用到這兩個API的時候,原來的READ_PHONE_STATE權限不管用了,需要READ_PHONE_NUMBERS權限才行
  • 媒體intent操作需要系統默認相機

  • 5G

  • 需要?APK?簽名方案?v2

  • 后臺位置信息訪問權限

  • 數據訪問審核

  • 用戶可以選擇權限單次授權(僅此一次)

    • 我們每次使用的時候都去判斷權限,沒有就去申請即可。

Android?12(API?31)

三方卡片內容:?https://developer.android.google.cn/about/versions/12?hl=zh-cn

  • 應用啟動頁?SplashScreen(影響所有應用);

    • 從Android?12開始,所有的App在每次啟動時(特指冷啟動與溫啟動),系統都會為我們加上一個默認的啟動畫面

    • 應用圖標?+圖標背景+前景遮罩+窗口背景

    • 啟動畫面允許我們一定程度的自定義,但總體都無法跳脫出以上4個元素,且無法去除。

    • 適配:方案

      • 設置除窗口背景之外的元素都為透明

      • 改用SplashScreen?API定制系統啟動畫面:可定制程度低,可能無法滿足產品的需求;

  • 麥克風和攝像頭切換開關

  • 聲明?android:exported

    • 應用組件需顯示聲明?android:exported

    • 從?Andorid?12?開始,當您的應用程序將目標版本設置為31或更高版本(targetSdkVersion?31)時,若應用程序組件(Activity、Service、Receiver、Provider)在配置清單manifest中未顯示聲明?android:exported?屬性,則在進行應用開發或打包時,將會出現如下錯誤?:?As?of?Android?12,?android:exported?must?be?set;?use?true?to?make?the?activity?available?to?other?apps,?and?false?otherwise.?For?launcher?activities,?this?should?be?set?to?true.

  • 通知欄變更

    • Notification通知欄布局樣式再次調整
  • 前臺服務:

    • 將禁止從后臺啟動前臺服務

    • 以下情況可啟動前臺服務:1.可見的?Activity?或窗口;2.用戶操作,如通知、小部件等等;3.特定的廣播和回調;4.STICKY?類型的服務可在崩潰或由于低內存而停止運行的情況下重啟;

  • 藍牙權限:

    • Android?12?引入了?BLUETOOTH_SCAN、BLUETOOTH_ADVERTISE?和?BLUETOOTH_CONNECT?權限。這些權限可讓以?Android?應用更輕松地與藍牙設備互動,不再需要申請設備位置信息相關權限。Android?12?開始,Google官方將藍牙掃描與位置權限進行了分離,因為官方發現:在隱私層面上,很難向終端用戶解釋位置權限與藍牙的關系。
  • 精確位置

    • 從?Andorid?12?開始,當您的應用程序將目標版本設置為31或更高版本(targetSdkVersion?31)時,若應用程序請求設備的精確位置,需同時請求?ACCESS_FINE_LOCATION?和?ACCESS_COARSE_LOCATION?權限。發出精確位置申請后,用戶側設備將彈出動態授權申請彈窗:
  • 待處理?intent?可變性

    • 簡單講,就是以Android?12為目標平臺的App,在構建PendingIntent時,需要指定Flag為FLAG_IMMUTABLE(建議)或FLAG_MUTABLE二者之一
  • 精確的鬧鐘權限

  • 通知?trampoline?限制

    • 簡單講,就是我們之前在配置通知(Notification)的點按行為時,可能會通過PendingIntent來啟動一個Service或BrocastReceiver。而以Android?12為目標平臺的App,如果嘗試在Service或BrocastReceiver中內調用?startActivity(),系統會阻止該Activity啟動,并在?Logcat?中顯示以下消息:

    • 適配:排查哪個Service或BrocastReceiver有此行為

      • 可在Terminal終端執行以下adb命令,該命令會在你點按通知后,識別哪個Service或BrocastReceiver調用了startActivity(),并輸出相關信息到Logcat,可以通過關鍵字“NotifInteractionLog”進行過濾:adb?shell?dumpsys?activity?service?\?com.android.systemui/.dump.SystemUIAuxiliaryDumpService
    • 考慮在配置通知(Notification)的點按行為時選擇直接啟動Activity

Android?13(API?32)

Android13官方文檔

  • 細分媒體權限:將?READ_EXTERNAL_STORAGE?細分為IAMGES、VIDEO、AUDIO權限(若設置?targetSdk>=33?則此項必需適配!)

  • WebView調整:廢棄setAppCacheEnabled與setForceDark方法;(若設置?targetSdk>=33?則此項必需適配!)

  • 靜態廣播注冊:注冊靜態廣播時,需設置對其他應用的可見性(若設置?targetSdk>=33?則此項必需適配!)

  • 通知權限:新增運行時通知權限:POST_NOTIFICATIONS(若設置?targetSdk>=33?則此項必需適配!)

  • Wi-Fi?:新增?NEARBY_WIFI_DEVICES?運行時權限(若設置?targetSdk>=33?則此項必需適配!)

  • 身體傳感器后臺權限:新增?BODY_SENSORS_BACKGROUND?運行時權限(若設置?targetSdk>=33?則此項必需適配!)

  • 剪切板內容隱藏:新增內容隱藏API(根據業務需求,選擇性適配!)

  • 非?SDK?接口的限制(若設置?targetSdk>=33?則此項必需適配!)

Android?14(API?33)

Android?14?功能和變更列表,官方介紹

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

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

相關文章

web學習筆記(二十三)

目錄 1.增加節點 1.1document.write 1.2innerHTML 1.3動態添加 1.4追加和插入節點 2.刪除、克隆、替換節點 2.1刪除節點 2.2克隆節點 2.3替換節點 3.事件 3.1什么是事件 3.2事件三要素 3.3事件的種類 3.4常見事件名稱(類型)匯總 4.操作…

代碼隨想錄算法訓練營第三十四天| 860.檸檬水找零, 406.根據身高重建隊列 ,452. 用最少數量的箭引爆氣球

860.檸檬水找零 - LeetCode 思路: 這個問題比較簡單, 用一個字典bill_dict記錄已經收到的錢已經錢的數量, 然后如果收到五元, 字典中的 bill_dict[5] 1。 收到10元 bill_dict[5] - 1 bill_dict[10] 1 。 麻煩的是收到20元&…

圖像剪輯|Linux|ImageMagick的初步使用--素描,毛玻璃等特效

前言: ImageMagick在圖像剪輯領域的地位基本等同于FFmpeg,和FFmpeg基本一樣,在Linux下使用此工具的原因是該工具可以使用shell腳本批量剪輯,在Windows下就會比較麻煩一些了 那么,本文主要是記錄一下ImageMagick的一些…

論文閱讀:基于超像素的圖卷積語義分割(圖結構數據)

#Superpixel-based Graph Convolutional Network for Semantic Segmentation github鏈接 引言 GNN模型根據節點特征周圍的邊來訓練節點特征,并獲得最終的節點嵌入。通過利用具有不同濾波核的二維卷積對來自附近節點的信息進行整合,給定超像素方法生成的…

汽車上的各種質量:整備質量、總質量、裝載質量、簧上質量

文章目錄 前言一、整備質量二、額定總質量三、額定裝載質量四、簧上質量 總結 前言 一、整備質量 整備質量指的是汽車按照出廠技術條件完全配備(包括備胎、工具、各種油水等)的質量。汽車的整備質量也就是人們常說的一輛汽車的自重,它的規范…

MATLAB--pie函數繪制復雜分類餅圖(2)--附案例代碼

MATLAB–pie函數繪制復雜分類數據的餅狀圖 目錄 MATLAB--pie函數繪制復雜分類數據的餅狀圖摘要1. 問題描述2. 具體步驟:3. 繪制結果4. 小結 摘要 在數據可視化中,餅狀圖是一種常用的展示分類數據的方式。之前,文章介紹了使用MATLAB繪制餅狀圖…

數據刪除

目錄 數據刪除 刪除員工編號為 7369 的員工信息 刪除若干個數據 刪除公司中工資最高的員工 Oracle從入門到總裁:??????https://blog.csdn.net/weixin_67859959/article/details/135209645 數據刪除 刪除數據就是指刪除不再需要的數據 delete from 表名稱 [where 刪…

群暉Synology Drive服務搭建結合內網穿透實現云同步Obsidian筆記文件夾

🌈個人主頁: Aileen_0v0 🔥熱門專欄: 華為鴻蒙系統學習|計算機網絡|數據結構與算法 ?💫個人格言:“沒有羅馬,那就自己創造羅馬~” #mermaid-svg-ebec69DBjtGk7apF {font-family:"trebuchet ms",verdana,arial,sans-serif;font-siz…

C++字典操作

創建字典 #include<iostream> #include<map> #include<string>using namespace std;int main(){map<string, int> mymap;}賦值 2.1 指定元素賦值 mymap["abc"] 1;2.2 添加鍵值對 mymap.insert(make_pair("bcd", 2));字典的順序…

后端傳給前端的時間字段前端顯示不正確

具體問題是什么呢&#xff0c;就比如我后段有一個字段是TimeStamp類型&#xff0c;從數據庫中查出數據是下面的樣式&#xff1a; 但是前端顯示的是下面的格式&#xff1a; 這個的解決方法還是挺多的&#xff0c;那接下來具體來看看吧~ 第一種&#xff1a; 在application.prop…

Linux使用bcache 將SSD加速硬盤

前言 在Linux下&#xff0c;使用SSD為HDD加速&#xff0c;目前較為成熟的方案有&#xff1a;flashcache&#xff0c;enhanceIO&#xff0c;dm-cache&#xff0c;bcache等&#xff0c;多方面比較以后最終選擇了bcache。 bcache 是一個 Linux 內核塊層超速緩存。它允許使用一個或…

Flink 面試題總結及答案

基礎 state的分類 key state和operate state state 的重分布 Flink狀態管理詳解&#xff1a;Keyed State和Operator List State深度解析 - 掘金 checkpoint 和save point https://zhuanlan.zhihu.com/p/79526638 flink job 的容錯策略 如果在沒有持續消息輸出的情況下&…

19.AUTOSAR MCAL分析(一):Microcontroller Driver

目錄 1. MCAL概述 2. Microcontroller Drivers 2.1 MCU Drivers 2.2 GPT Driver 2.3 WatchDog Driver 2.4 CoreTest 3.小結 <

【短時交通流量預測】基于單層BP神經網絡

課題名稱&#xff1a;基于單層BP神經網絡的短時交通流量預測 版本時間&#xff1a;2023-04-27 代碼獲取方式&#xff1a;QQ&#xff1a;491052175 或者 私聊博主獲取 模型簡介&#xff1a; 城市交通路網中交通路段上某時刻的交通流量與本路段前幾個時段的交通流量有關&…

Android 自定義組件

在 Android 開發中&#xff0c;有時我們需要創建自定義的 UI 組件以滿足特定的需求&#xff0c;這就是 Android 自定義組件的用途。在這篇博客中&#xff0c;我們將介紹如何創建和使用自定義組件&#xff0c;并以一個標題欄組件為例進行說明。 什么是自定義組件&#xff1f; …

【CSP試題回顧】201312-3-最大的矩形

CSP-201312-3-最大的矩形 解題思路 1. 遍歷所有可能的矩形高度&#xff1a; 通過遍歷所有矩形高度來找到最大的矩形&#xff0c;即對每個可能的高度 it&#xff08;從直方圖中的最小高度到最大高度 heightMax&#xff09;&#xff0c;代碼將嘗試找到在這個高度或以上的最長連…

軟件測試相關介紹

什么是軟件測試&#xff1f; 軟件測試&#xff1a;使用技術手段驗證軟件是否滿足使用需求 軟件測試是指通過運行、評估和驗證軟件系統的過程&#xff0c;以確定其是否滿足預期的需求和質量標準。它是軟件開發生命周期中的一個重要環節&#xff0c;旨在發現和修復潛在的缺陷和…

前端錯誤 “TypeError Cannot read properties of undefined (reading ‘xxx‘)

前端錯誤 “TypeError: Cannot read properties of undefined (reading ‘xxx‘) 原因分析及解決 情況一&#xff1a; 出現該錯誤的原因是因為你花括號中的某些屬性未定義。極大可能是因為你寫錯了屬性名稱 情況二&#xff1a; 異步請求獲取數據時&#xff0c;語句可能寫錯&…

Linux操作系統——進程信號

1.信號的概念 生活當中哪些場景算信號呢&#xff1f;比如說你晚上調了個鬧鐘&#xff0c;然后第二天早上你聽到了鬧鐘響了你就知道該起床了&#xff0c;這種機制就叫做信號機制。在生活中我們的信號是非常非常多的&#xff0c;比如說有&#xff1a;紅綠燈&#xff0c;下課鈴聲…

Java中多線程的各種姿勢

在Java中&#xff0c;多線程編程是一種強大的并發編程技術&#xff0c;可以讓你同時執行多個任務。Java提供了多種方式來創建和管理線程。以下是Java中給多線程使用的一些主要方法&#xff1a; 繼承Thread類&#xff1a; 創建一個新的類繼承自Thread類。覆蓋run()方法以定義線程…