Android 11 看我就好了

概述

Android 11 開發者預覽版計劃從 2020 年 2 月啓動,到向 AOSP 和 OEM 提供最終的公開版本時結束,最終版本預計將於 2020 年第 3 季度發佈。那就是說等咱們真正用上正式版的時間大概是9、十月份,不過由於疫情緣由可能會有些許推遲,但願疫情能早日結束吧!android

附上谷歌官網放出的時間線: api

不少小夥伴說剛剛用上了Android 10完成了版本適配,然而Android 11就已經到來了,安卓仔表示太難了...瀏覽器

雖然有些不情願,可是想着系統版本升級確定是爲了Android系統更加完善,想一想仍是挺好的一件事。那就讓咱們一塊兒來看看此次Android 11給咱們帶來了什麼吧 !緩存

版本特性

對於用戶來講有哪些重要更新呢?安全

  • 無縫更新bash

    無縫更新會在Android 11 系統啓動時須要虛擬A / B兩個分區以減小由系統更新引發的停機時間,並提供一種在更新出現問題時能夠恢復的機制。網絡

    Android系統更新時手機會啓動進入恢復狀態,而且可能會停留在「安裝系統更新」屏幕上長達25分鐘。這將致使大量的停機時間,在此期間您將沒法運行任何APP,查看任何短信或接放任何電話。發生停機是由於更新系統文件時須要使系統分區脫機,可是無縫更新系統通使用兩個系統分區來解決這個問題。併發

  • 優化5G支持框架

    Android 11 帶來了全新的連接 API,用以支持 5G 網絡,所以能夠充分利用 5G 提供的改進的速度和延遲,如在檢測到高質量網絡時,使 APP 自動提供高質量視頻。佈局

    動態計量API

    使用此API,你能夠檢查鏈接是否未計量,若是是,則提供更高的分辨率或質量,從而可能使用更多數據。擴展了API的範圍,使其包含蜂窩網絡,以便您能夠識別運營商在鏈接到運營商的5G網絡時提供真正未計量數據的用戶。

    帶寬估算器API

    已更新了適用於5G的API,以使其更易於檢查下行/上行帶寬,而無需輪詢網絡或計算您本身的估算值。若是調制解調器不提供支持,咱們將基於當前鏈接進行默認估算。

  • 打開飛行模式,藍牙耳機不斷連

    在 Android 11 開發者預覽版中,用戶鏈接藍牙耳機後,開啓飛行模式依然支持藍牙不斷連,而且還有消息提醒。

  • 滾動截屏/長截圖

    雖然不少手機廠商深度定製系統中早已集成,可是原生Android 11系統總算是支持了,也不錯了。

  • 電池共享

    電池共享功能相似於「反向無線充電」,用戶能夠與其餘兼容設備(包括智能手錶,耳機等)共享 Pixel 的電池。

  • 在快速回復中使用富媒體

    從 Android 11 開始,用戶能夠在快速回復中插入圖片和其餘富媒體內容。

  • 懸浮聊天氣泡

    Android 11 的新增了懸浮聊天氣泡功能,只要 APP 使用全新的 API,就能夠將正在進行的對話以氣泡的形式懸浮在屏幕中。

  • 隱私和權限

    Android 11 新增了關於位置、麥克風和攝像頭的一次性權限許可。也就是說,得到一次性權限許可的 APP 在下次使用時,依然要詢問用戶獲取受權。

  • 屏幕錄像

    屏幕錄像曾在 Android 10 的早期版本中出現,但隨後被刪除了。隨着 Android 11 開發者預覽版的推出,屏幕錄像功能又再次上線。

對於開發人員適配須要注意哪些呢?

  • 存儲機制更新
  • 權限更新
  • 應用包可見性
  • 前臺服務類型
  • 消息框(Toast)的更新
  • 支持併發使用多個攝像頭
  • 其餘一些新功能

附官網重大隱私權變動圖:

存儲機制更新

分區存儲強制執行

Android10 就開始引進了分區存儲功能,分區存儲主要是將共享存儲去分爲各個集合,並限制應用對此區域隨意訪問

  • 清晰的應用歸屬
  • 對應用數據的保護
  • 對用戶數據的保護

你們都知道Android10 提供了requestLegacyExternalStorage = true 選擇退出分區存儲,在Android11中就將會強制使用分區存儲了。

不過官方爲了給開發者更多時間進行測試,以 Android 10(API 級別 29)爲目標平臺的應用仍可請求 requestLegacyExternalStorage 屬性。應用能夠利用此標記暫時停用與分區存儲相關的變動,例如授予對不一樣目錄和不一樣類型的媒體文件的訪問權限。當您將應用更新爲以 Android 11 爲目標平臺後,系統會忽略 requestLegacyExternalStorage 標記。

保持與 Android 10 的兼容性

若是應用在 Android 10 設備上運行時選擇退出分區存儲,建議您繼續在應用的清單文件中將 requestLegacyExternalStorage 設爲 true。這樣,應用就能夠在運行 Android 10 的設備上繼續按預期運行。

將數據遷移到使用分區存儲時可見的目錄

若是您的應用使用舊版存儲模型且以前以 Android 10 或更低版本爲目標平臺,您可能會將數據存儲到啓用分區存儲模型後您的應用沒法訪問的目錄中。在以 Android 11 爲目標平臺以前,請將數據遷移到與分區存儲兼容的目錄。在大多數狀況下,您能夠將數據遷移到您的應用專用目錄。

若是您有須要遷移的數據,當用戶升級到以 Android 11 爲目標平臺的新版應用時,能夠保留舊版存儲模型。這樣,用戶就能夠保留對您的應用以前用於保存數據的目錄中存儲的應用數據的訪問權限。如需啓用舊版存儲模型以進行升級,請在應用的清單中將 preserveLegacyExternalStorage 屬性設爲 true。

注意:大多數應用都不須要使用 preserveLegacyExternalStorage。此標記僅適用於這樣一種狀況:您將應用數據遷移到了與分區存儲兼容的位置,而且但願用戶在更新您的應用時保留對數據的訪問權限。使用此標記會致使更難以測試分區存儲對您應用的用戶有何影響,由於當用戶更新您的應用時,它會繼續使用舊版存儲模型。

若是您使用 preserveLegacyExternalStorage,舊版存儲模型只在用戶卸載您的應用以前保持有效。若是用戶在搭載 Android 11 的設備上安裝或從新安裝您的應用,那麼不管 preserveLegacyExternalStorage 的值是什麼,您的應用都沒法停用分區存儲模型。

測試分區存儲 如需在您的應用中啓用分區存儲,而不考慮應用的目標 SDK 版本和清單標記值,請啓用如下應用兼容性標記:

DEFAULT_SCOPED_STORAGE(默認狀況下,對全部應用處於啓用狀態) FORCE_ENABLE_SCOPED_STORAGE(默認狀況下,對全部應用處於停用狀態) 如需停用分區存儲而改用舊版存儲模型,請取消設置這兩個標記。

媒體文件訪問權限

存儲權限

  • 針對全部應用

    存儲(Storage)運行時權限已改名爲文件和媒體(Files & Media)

  • 針對Android11爲目標平臺的應用

    WRITE_EXTERNALSTORAGE 和WRITE_MEDIA_STORAGE再也不提供任何其餘訪問權限

管理設備存儲空間

若是您的應用是文件管理器應用而且在 Android 11 上運行,它就不能再刪除其餘應用的緩存文件,即便您的應用具備全部文件訪問權限也是如此。相反,您的應用應執行如下操做:

經過調用 ACTION_MANAGE_STORAGE intent 操做檢查可用空間。 若是設備上的可用空間不足,請提示用戶贊成讓您的應用清除全部緩存。爲此,請調用 ACTION_CLEAR_APP_CACHE intent 操做。

注意:ACTION_CLEAR_APP_CACHE intent 操做會嚴重影響設備的電池續航時間,而且可能會從設備上移除大量的文件。

MediaStore API 和 批量處理

Android 11中未通過用戶贊成是不能再刪除其餘應用的文件,即便您的應用具備全部文件訪問權限也是如此。

  • 容許進行批量編輯/刪除

  • MediaStore API 中添加了多種方法

    createWriteRequest()

    用戶嚮應用授予對指定媒體文件組的寫入訪問權限的請求。

    createFavoriteRequest()

    用戶將設備上指定的媒體文件標記爲「收藏」的請求。對該文件具備讀取訪問權限的任何應用均可以看到用戶已將該文件標記爲「收藏」。

    createTrashRequest()

    用戶將指定的媒體文件放入設備垃圾箱的請求。垃圾箱中的內容會在系統定義的時間段後被永久刪除。

    createDeleteRequest()

    用戶當即永久刪除指定的媒體文件(而不是先將其放入垃圾箱)的請求。

申請媒體文件的批量操做權限以下:(感謝google團隊分享)

使用原始路徑訪問文件

Android 10是不容許直接使用文件路徑這種方式訪問的,可是有些第三方框架調用native方法很難避免直接使用文件路徑的方式,因此Android 11 開始容許具備 READ_EXTERNAL_STORAGE 權限的應用讀取使用直接文件路徑和原生庫的設備媒體文件。藉助此功能,您的應用與第三方媒體庫會配合使用得更順暢。

若是您使用直接文件路徑和原生庫,建議您在應用的清單文件中將 requestLegacyExternalStorage 設置爲 true,從而選擇停用分區存儲。這樣就能保證各個版本以前的兼容了。

須要注意的地方:

  • 直接訪問路徑是基於MediaStore的,直接使用一定會形成性能降低,對性能的影響取決於I/O模式
  • 打開和第一次讀取相對來講性能影響會比較明顯
  • 若是第三方庫須要直接訪問路徑的時候才考慮用它,而爲了性能考慮仍是儘量的使用MediaStore API

訪問其餘應用的私有目錄

在 Android 11 上,應用沒法再訪問外部存儲設備中的任何其餘應用的專用於特定應用的目錄中的文件。

文檔訪問限制

爲讓開發者有時間進行測試,如下與存儲訪問框架 (SAF) 相關的變動只有在應用以 Android 11 爲目標平臺時纔會生效。

  • 訪問目錄

    您沒法再使用 ACTION_OPEN_DOCUMENT_TREE intent 操做請求訪問如下目錄:

    內部存儲卷的根目錄。

    設備製造商認爲可靠的各個 SD 卡卷的根目錄,不管該卡是模擬卡仍是可移除的卡。 Download 目錄。

  • 訪問文件

    您沒法再使用 ACTION_OPEN_DOCUMENT_TREE 或 ACTION_OPEN_DOCUMENT intent 操做請求用戶從如下目錄中選擇單獨的文件:

    Android/data/ 目錄及其全部子目錄。

    Android/obb/ 目錄及其全部子目錄。

全部文件訪問權限

若是你的應用須要訪問大量共享存儲區的文件能夠經過如下方式獲取「全部文件訪問權限」:

  • 聲明 MANAGE_EXTERNAL_STORAGE 權限。

  • 使用 ACTION_MANAGE_ALL_FILES_ACCESS_PERMISSION intent

操做將用戶引導至一個系統設置頁面,在該頁面上,用戶能夠爲您的應用啓用如下選項:授予全部文件的管理權限。

「全部文件訪問權限」可授予如下權限:

  • 對共享的存儲空間內全部文件的讀寫訪問權限。

  • 對 MediaStore.Files 表的內容的訪問權限。

該權限適用於文件管理和備份還原等批量處理功能的應用使用的,若是您只須要訪問一個文件和幾個文件這樣的功能時使用存儲訪問框架就能夠而不是獲取「全部文件訪問權限」,期待Google play做出更進一步的規範,明確合規/不合規的用例。

權限更新

隨着用戶更加在乎應用的隱私性,在Android 11 中,用戶可以針對位置信息、麥克風和攝像頭指定更精細的權限

一次性權限

Android 11 中加入了一次性權限,每當應用請求與位置信息、麥克風或攝像頭相關的權限時,面向用戶的權限對話框就會包含僅限這一次選項。若是用戶在對話框中選擇此選項,系統會嚮應用授予臨時的單次受權。 當使用完功能以後,系統就會回收這次權限。

而後,應用能夠在一段時間內訪問相關數據,具體時間取決於應用的行爲和用戶的操做:

  • 當應用的 Activity 可見時,應用能夠訪問相關數據。

  • 若是用戶將應用轉爲後臺運行,應用能夠在短期內繼續訪問相關數據。

  • 若是您在 Activity 可見時啓動了一項前臺服務,而且用戶隨後將您的應用轉到後臺,那麼您的應用能夠繼續訪問相關數據,直到該前臺服務中止。

  • 若是用戶撤消單次受權(例如在系統設置中撤消),不管您是否啓動了前臺服務,應用都沒法訪問相關數據。與任何權限同樣,若是用戶撤消了應用的單次受權,應用進程就會終止。

關於適配:無需任何改動!!!

若是您的應用已遵循與權限相關的最佳作法,您無需更改應用便可支持單次受權。

須要特別指出的是,在嘗試訪問受某項權限保護的信息以前,請務必檢查應用是否具備該權限;若是應用首次請求權限,或者若是用戶已撤消權限,請完成如下流程:

1.調用 shouldShowRequestPermissionRationale()。若是此方法返回 true,請在您的應用中顯示一個界面元素,向用戶說明您的應用爲什麼須要獲取權限。

2.請求權限。

再次請求權限時顯示的對話框

當用戶下次打開應用而且應用隨後再次請求與位置信息、麥克風或攝像頭相關的權限時,系統會再次提示用戶。

請求權限的流程(感謝google團隊分享):

第一次申請權限默認是不會有權限的調用緣由,當用戶第一次拒絕了在這個回調裏解釋其權限調用緣由,當用戶知道了緣由,再次申請權限系統就會調shouldShowRequestPermissionRationale() = true,開發者就能夠在這個判斷裏面彈出權限的解釋並讓用戶決定是否繼續申請權限調取系統權限框或者(no thanks),系統的權限框調用了二次都拒絕了的話,就不再會顯示了。

權限對話框的可見性

Android 11 不建議重複請求特定權限組中的權限。在應用安裝到設備上後,若是用戶在使用過程當中兩次針對某項特定的權限點按拒絕,此操做表示其但願之後請求相應權限組中的該權限時「再也不詢問」。

系統還對與點按拒絕選項相仿的操做的響應行爲作出了定義:

若是用戶按返回按鈕關閉權限對話框,此操做不算做「拒絕」操做。

若是用戶使用 requestPermissions() 從您的應用轉到系統設置,而後按返回按鈕,此操做就算做「拒絕」操做。

電話號碼

Android 11 更改了您的應用在讀取電話號碼時使用的與電話相關的權限。

若是您的應用以 Android 11 爲目標平臺,而且須要訪問如下列表中顯示的電話號碼 API,則必須請求 READ_PHONE_NUMBERS 權限,而不是 READ_PHONE_STATE 權限。

TelephonyManager 類和 TelecomManager 類中的 getLine1Number() 方法。

TelephonyManager 類中不受支持的 getMsisdn() 方法。

若是您的應用聲明 READ_PHONE_STATE 以調用前面列表中的方法之外的方法,您能夠繼續在全部 Android 版本中請求 READ_PHONE_STATE。不過,若是您僅對前面列表中的方法使用 READ_PHONE_STATE 權限,請按如下方式更新您的清單文件:

更改 READ_PHONE_STATE 的聲明,以使您的應用僅在 Android 10(API 級別 29)及更低版本中使用該權限。

添加 READ_PHONE_NUMBERS 權限。

如下清單聲明代碼段演示了此過程:

<manifest>
    <!-- Grants the READ_PHONE_STATE permission only on devices that run
         Android 10 (API level 29) and lower. -->
    <uses-permission android:name="READ_PHONE_STATE"
                     android:maxSdkVersion="29" />
    <uses-permission android:name="READ_PHONE_NUMBERS" />
</manifest>
複製代碼

位置權限

關於位置權限有前臺位置權限和後臺位置權限,在目標版本Android R如下版本的時候默認是申請前臺位置權限的時候就同時申請了後臺位置權限,而Android R開始是不能同時申請的,只能先申請前臺位置權限再申請後臺位置權限。

後臺位置信息訪問權限

Android 11 經過如下方法進一步強調了用戶對位置信息的控制:添加了單次受權,並移除了用戶經過應用內提示授予 ACCESS_BACKGROUND_LOCATION 權限的功能

  • 若是您的應用以 Android 11 爲目標平臺,您能夠建立自定義界面,向用戶解釋您的應用爲何須要 ACCESS_BACKGROUND_LOCATION 權限。

  • 若是您的應用以較低版本爲目標平臺,您必須使用系統提供的界面,該界面中指出您的應用須要在後臺訪問位置信息,即便您的應用沒有被使用。

建立自定義界面

若是您的應用以 Android 11 爲目標平臺,您能夠顯示自定義界面,用於更清楚地向用戶解釋您的應用爲何須要 ACCESS_BACKGROUND_LOCATION 權限。

請遵循本部分中的準則,建立用戶更容易理解的界面。

說明應用對後臺位置信息的要求 如需在您的應用中請求 ACCESS_BACKGROUND_LOCATION,您的應用必須先獲取前臺位置權限,即 ACCESS_COARSE_LOCATION 或 ACCESS_FINE_LOCATION。若是您嘗試同時請求 ACCESS_BACKGROUND_LOCATION 和其餘任何權限,系統會拋出異常。

當有了前臺位置權限後,你須要彈出爲何請求後臺位置權限的緣由的對話框:

  • 授予權限。若是用戶選擇此選項,就對 ACCESS_BACKGROUND_LOCATION 發出權限請求。系統會將用戶定向到系統設置,以完成授予此權限的過程。

    爲了幫助用戶在設置中找到用於授予 ACCESS_BACKGROUND_LOCATION 權限的選項,您能夠在應用的界面中爲相應的設置選項添加用戶可見的標籤。getBackgroundPermissionOptionLabel() 方法可提供根據用戶的設備語言偏好設置進行了本地化的標籤。

  • 不授予權限。若是用戶不授予權限,他們應可以繼續使用應用。若是用戶選擇此選項,應用能夠正常繼續運行,但可能會讓用戶離開須要後臺位置信息訪問權限的功能。

請注意,即便在嚮應用授予 ACCESS_BACKGROUND_LOCATION 權限後,用戶也能夠在系統設置中將其位置信息訪問權限更改成僅在使用該應用時容許或每次都詢問。用戶也能夠徹底拒絕應用訪問位置信息。

根據須要將用戶定向到系統設置

若是用戶贊成向您的應用授予 ACCESS_BACKGROUND_LOCATION 權限,您的應用應將用戶定向系統設置裏去選擇開啓權限

重定向到系統設置受限制

在應用讓用戶轉到其在系統設置中的權限頁面後,用戶可能會選擇始終容許之外的位置信息訪問權限級別,如拒絕。Android 11 最多容許應用將用戶從一個界面引導至系統設置兩次。所以,請務必清楚地向用戶解釋應用功能爲何須要在後臺訪問位置信息。

當應用達到此限制時,您仍然能夠調用一個 intent,以將用戶定向到應用在系統設置中的信息頁面。在該頁面中,用戶能夠轉到應用的權限頁面。如需加載應用信息頁面,請使用 Settings.ACTION_APPLICATION_DETAILS_SETTINGS intent 操做。

應用包可見性

Android 11 更改了應用查詢同一設備上的其餘已安裝應用以及與之交互的方式。若是您的應用以 Android 11 爲目標平臺,您可能須要在應用的清單文件中添加 元素,以便系統瞭解應向您的應用顯示哪些其餘應用。

查詢特定軟件包及與之交互

若是您知道要查詢或與之交互的一組特定應用(例如,與您的應用集成的應用或您使用其服務的應用),請將其軟件包名稱添加到 標記內的一組 元素中:

<manifest package="com.example.game">
    <queries>
        <package android:name="com.example.store" />
        <package android:name="com.example.services" />
    </queries>
    ...
</manifest>
複製代碼

在給定 intent 過濾器的狀況下查詢應用及與之交互

您的應用可能須要查詢一組具備特定用途的應用或與之交互,但您可能不知道要添加的具體軟件包名稱。在這種狀況下,您能夠在 標記中列出 intent 過濾器簽名。而後,您的應用就能夠發現具備匹配的 標記的應用。

如下示例容許您的應用看到支持 JPEG 圖片共享功能的已安裝應用:

<manifest package="com.example.game">
    <queries>
        <intent>
            <action android:name="android.intent.action.SEND" />
            <data android:mimeType="image/jpeg" />
        </intent>
    </queries>
    ...
</manifest>
複製代碼

查詢全部應用及與之交互

在極少數狀況下,您的應用可能須要查詢設備上的全部已安裝應用或與之交互,無論這些應用包含哪些組件。例如,Google Play 等應用商店。爲了容許您的應用看到其餘全部已安裝應用,Android 11 引入了 QUERY_ALL_PACKAGES 權限。

在即將推出的開發者預覽版中,Google Play 會爲須要此權限的應用提供相關指南,敬請期待。

不受變動影響的用例

如下列表包含幾個不須要 聲明的用例示例:

  • 目標應用是您本身的應用。
  • 您可使用隱式 intent 啓動 Activity。您的應用可能會限制其使用隱式 intent 與其餘應用交互的方式。
  • 您的應用與實現 Android 核心功能的某些系統軟件包(如媒體提供程序)交互。 其餘應用指望從您的應用得到結果。當您的應用是內容提供程序時、當其餘應用經過調用 startActivityForResult() 調用您的應用時,以及當您的應用是其餘應用嘗試啓動或鏈接到的服務時,會出現這種狀況。

例如,若是其餘應用向您應用中的內容提供程序發出請求,系統將容許您的應用看到該其餘應用。

在非瀏覽器應用中啓動網絡 intent

若是你想經過應用打開一個url,可是又不想打開的方式框裏出現經過瀏覽器打開選項,則能夠按照以下方式實現

若是手機中除了瀏覽器外沒有適合打開該url的方式,則會拋出ActivityNotFoundException異常,能夠獲取到這個異常進行下一步的處理。

前臺服務類型

從 Android 9 開始,應用僅限於在前臺訪問攝像頭和麥克風。爲了進一步保護用戶,Android 11 更改了前臺服務訪問攝像頭和麥克風相關數據的方式。若是您的應用以 Android 11 爲目標平臺而且在某項前臺服務中訪問這些類型的數據,您須要在該前臺服務的聲明的 foregroundServiceType 屬性中添加新的 camera 和 microphone 類型。

使用位置信息和攝像頭的示例

若是應用中的某項前臺服務須要訪問與設備的位置信息和攝像頭相關的數據,請按如下代碼段所示聲明該服務:

<manifest>
    ...
    <service ... android:foregroundServiceType="location|camera" />
</manifest>
複製代碼

使用位置信息、攝像頭和麥克風的示例

若是某項前臺服務須要訪問位置信息、攝像頭和麥克風,請按如下代碼段所示聲明該服務:

<manifest>
    ...
    <service ...
        android:foregroundServiceType="location|camera|microphone" />
</manifest>
複製代碼

消息框(Toast)的更新

Android 11 爲了保護用戶而棄用了自定義消息框視圖。爲了給開發者更多的時間來適應這些變動,只有在您的應用以 Android 11 爲目標平臺時,這些變動纔會生效。

須要注意的地方:

  • 若是包含自定義視圖(使用了setView())的消息框是以 Android 11 爲目標平臺的應用從後臺發送的,則系統會屏蔽這些消息框。

  • 仍容許使用文本消息框;此類消息框是使用 Toast.makeText() 建立的,並不調用 setView()

  • 若是您但願在消息框(文本消息框或自定義消息框)出現或消失時收到通知,請使用新的 addCallback() 方法。

  • 文本消息框 API 變動(以 Android 11 爲目標平臺的應用)

    getView() 方法返回 null
    複製代碼

    如下方法的返回值並不反映實際值,所以不該在您的應用中依賴於它們:

    getHorizontalMargin()
    
      getVerticalMargin()
    
      getGravity()
    
      getXOffset()
    
      getYOffset()
    複製代碼

    如下方法是空操做,所以您的應用不該使用它們:

    setMargin()
    
      setGravity()
    複製代碼

支持併發使用多個攝像頭

Android 11 添加了 API 以查詢對同時使用多個攝像頭(包括前置攝像頭和後置攝像頭)的支持。

如需在運行應用的設備上檢查支持狀況,請使用如下方法:

getConcurrentCameraIds() 可返回攝像頭 ID 組合 Set,這些組合可與有保證的數據流組合併發進行流式傳輸(若是它們是由同一應用進程配置的)。

isConcurrentSessionConfigurationSupported() 可查詢攝像頭設備是否能夠併發支持相應的會話配置。

其餘一些新功能

更好地支持瀑布屏

Android 11 提供了一些 API 以支持瀑布屏,這是一種無邊框的全面屏。這種顯示屏被視爲劉海屏的變體。現有的 DisplayCutout.getSafeInset…() 方法如今會返回可以避開瀑布區域以及劉海的安全邊襯區。如需在瀑布區域中呈現您的應用內容,請執行如下操做:

調用 DisplayCutout.getWaterfallInsets() 以獲取瀑布邊襯區的精確尺寸。

將窗口布局屬性 layoutInDisplayCutoutMode 設爲 LAYOUT_IN_DISPLAY_CUTOUT_MODE_ALWAYS,以容許窗口延伸到屏幕各個邊緣上的劉海和瀑布區域。您必須確保劉海或瀑布區域中沒有重要的內容。

合頁角度傳感器和可摺疊設備

使用 Android 11,能夠經過如下方法使運行在採用合頁式屏幕配置的設備上的應用可以肯定合頁角度:提供具備 TYPE_HINGE_ANGLE 的新傳感器,以及新的 SensorEvent,後者能夠監控合頁角度,並提供設備的兩部分之間的角度測量值。您可使用這些原始測量值在用戶操做設備時執行精細的動畫顯示。

儘管對於某些類型的應用(例如啓動器和壁紙)而言,知道確切的合頁角度會頗有用,但大多數應用都應該使用 Jetpack 窗口管理器庫,經過調用 DeviceState.getPosture() 檢索設備狀態。

或者,您的應用也能夠調用 registerDeviceStateChangeCallback(),以在 DeviceState 更改時收到通知,並在狀態發生變化時作出響應。

因爲目前市場上已經有且將來還會出現更多不一樣的窗口和設備配置,所以對設備狀態作出響應更加安全可靠。

5G 圖標顯示

在 Android 11(API 級別「R」)及更高版本中,具備 android.Manifest.permission.READ_PHONE_STATE 權限的應用能夠經過 PhoneStateListener.onDisplayInfoChanged() 請求更新電話顯示信息,其中包括用於營銷和品牌塑造的無線接入技術信息。

這款新 API 提供了適用於不一樣運營商的各類 5G 圖標顯示解決方案。支持的技術包括:

  • LTE
  • 採用載波聚合技術的 LTE (LTE+)
  • 高級專業版 LTE (5Ge)
  • NR (5G)
  • 毫米波移動網絡頻段上的 NR (5G+)

更多API及其功能

Android 11 還提供了更多的api及其功能能夠參考 點我看世界

最後

首先感受Google團隊分享! 本文是參考官方文檔和瀏覽Android 11 Labs 線上活動視頻而整理總結出來的關於Android 11的知識,可能不夠全面,還請你們多多指教,更多內容請查看Android開發者平臺

由於正式版Android 11還未發佈,後續可能Google大佬還會更新一些其餘的內容,最近的通常Android 11 Beta定於6月3號發佈,但因美國多地爆發抗議等活動而推遲了,可能今年正式版出現的時間也會稍有推遲,可是正義終將到來!!!

但願世界和平!!!

相關文章
相關標籤/搜索