行為變更:指定 Android 13 以上版本的應用程式

和先前版本一樣,Android 13 也包含可能會影響應用程式的行為變更。以下行為變更僅適用於指定 Android 13 以上版本的應用程式。如果您的應用程式指定 Android 13 以上版本,建議您視情況修改應用程式,以支援這些行為。

此外,請務必查看影響所有在 Android 13 中執行的應用程式的行為變更清單。

隱私權

通知權限會影響前景服務外觀

如果使用者拒絕通知權限,就不會在通知導覽匣中看到前景服務相關通知。不過,無論使用者是否授予通知權限,使用者仍會在工作管理員中看到前景服務相關通知。

為附近 Wi-Fi 裝置新增執行階段權限

在舊版 Android 中,使用者必須授予應用程式 ACCESS_FINE_LOCATION 權限,才能完成幾項常見的 Wi-Fi 用途。

由於使用者很難將位置存取權與 Wi-Fi 功能建立關聯,因此 Android 13 (API 級別 33) 會在 NEARBY_DEVICES 權限群組中,針對可透過 Wi-Fi 管理裝置與附近存取點連線的應用程式,加入執行階段權限。這項權限 NEARBY_WIFI_DEVICES 會執行 Wi-Fi 用途,例如:

  • 尋找或連線至鄰近裝置,例如印表機或媒體投放裝置。 此工作流程可讓應用程式完成以下類型的工作:
    • 透過錶帶接收 AP 資訊,例如透過 BLE。
    • 透過 Wi-Fi Aware 探索及連線裝置,並使用僅限本機的無線基地台連線。
    • 透過 Wi-Fi Direct 探索裝置並連線。
  • 啟動裝置與已知 SSID 的連線,例如汽車或智慧住宅裝置。
  • 啟動僅限本機的無線基地台。
  • 範圍涵蓋附近的 Wi-Fi Aware 裝置。

只要應用程式不會透過 Wi-Fi API 取得實際位置資訊,請在指定 Android 13 以上版本並使用 Wi-Fi API 時要求 NEARBY_WIFI_DEVICES,而非 ACCESS_FINE_LOCATION。宣告 NEARBY_WIFI_DEVICES 權限時,請強烈宣告應用程式絕對不會從 Wi-Fi API 取得實際位置資訊。方法是將 android:usesPermissionFlags 屬性設為 neverForLocation。這項程序與 Android 12 (API 級別 31) 以上版本中的做法類似,您已聲明藍牙裝置資訊不會用於位置

進一步瞭解如何要求存取鄰近 Wi-Fi 裝置的權限

精細媒體權限

對話方塊的 2 個按鈕 (由上至下) 為「允許」和「不允許」
圖 1 當您要求 READ_MEDIA_AUDIO 權限時,使用者看到的系統權限對話方塊。

如果應用程式指定 Android 13 以上版本,且需要存取其他應用程式建立的媒體檔案,那麼您必須要求下列一或多項精細媒體權限,而非 READ_EXTERNAL_STORAGE 權限:

媒體類型 要求權限
圖片和相片 READ_MEDIA_IMAGES
影片 READ_MEDIA_VIDEO
音訊檔案 READ_MEDIA_AUDIO

存取其他應用程式的媒體檔案之前,請先確認使用者已授予應用程式適當的精細媒體權限。

圖 1 顯示了要求 READ_MEDIA_AUDIO 權限的應用程式。

如果您同時要求 READ_MEDIA_IMAGES 權限和 READ_MEDIA_VIDEO 權限,系統只會顯示一個系統權限對話方塊。

如果應用程式先前已取得 READ_EXTERNAL_STORAGE 權限,則在升級時,系統會自動授予所有要求的 READ_MEDIA_* 權限。您可以使用下列 ADB 指令查看升級的權限:

adb shell cmd appops get --uid PACKAGE_NAME

必須取得新權限,才能在背景使用人體感應器

Android 13 導入人體感應器「使用時」存取權的概念,例如心率、體溫和血氧比例。這個存取模式與系統針對 Android 10 (API 級別 29) 中針對位置推出的系統導入的模式非常類似。

如果應用程式以 Android 13 為目標版本,且需要在背景執行時需要存取人體感應器資訊,則除了現有的 BODY_SENSORS 權限之外,您還必須宣告新的 BODY_SENSORS_BACKGROUND 權限。

效能和電池

電池資源使用率

如果您的應用程式指定 Android 13 為目標版本,且使用者將應用程式設為「受限制」狀態,則在使用者基於其他原因啟動應用程式之前,系統不會傳送BOOT_COMPLETED廣播或LOCKED_BOOT_COMPLETED廣播訊息。

使用者體驗

取自 PlaybackState 的媒體控制項

針對指定 Android 13 (API 級別 33) 以上版本的應用程式,系統會透過 PlaybackState 動作推斷媒體控制項。這樣一來,系統就能在手機和平板電腦之間顯示更豐富的控制項,且媒體控制項在其他 Android 平台 (例如 Android Auto 和 Android TV) 上的呈現方式也保持一致。

圖 2 分別顯示其在手機和平板電腦上的顯示情形範例。

媒體控制項在手機和平板電腦裝置上的顯示方式,採用範例軌跡呈現按鈕的顯示方式
圖 2: 手機和平板電腦裝置上的媒體控制項

在 Android 13 之前,系統會依照「加入」的順序,顯示最多五個動作來自 MediaStyle 通知的動作。以精簡模式為例 (例如在收合的快速設定中),系統會顯示最多三個以 setShowActionsInCompactView() 指定的動作。

從 Android 13 開始,系統會根據 PlaybackState 顯示最多五個動作按鈕,如下表所述。在精簡模式下,系統只會顯示前三個動作版位。如果應用程式未指定 Android 13 或不含 PlaybackState,系統會根據上一段所述,根據新增至 MediaStyle 通知的 Action 清單顯示控制項。

版位 動作 條件
1 播放 PlaybackState 的目前狀態為下列其中一種狀態:
  • STATE_NONE
  • STATE_STOPPED
  • STATE_PAUSED
  • STATE_ERROR
載入中的旋轉圖示 PlaybackState 的目前狀態為下列其中一種狀態:
  • STATE_CONNECTING
  • STATE_BUFFERING
暫停 PlaybackState 的目前狀態並非上述項目。
2 上一頁 PlaybackState 操作包含 ACTION_SKIP_TO_PREVIOUS
自訂 PlaybackState 動作不包含 ACTION_SKIP_TO_PREVIOUSPlaybackState 自訂動作,其中包含尚未設定的自訂動作。
未連接裝置 PlaybackState 額外項目包含鍵 SESSION_EXTRAS_KEY_SLOT_RESERVATION_SKIP_TO_PREVtrue 布林值。
3 繼續 PlaybackState 操作包含 ACTION_SKIP_TO_NEXT
自訂 PlaybackState 動作不包含 ACTION_SKIP_TO_NEXTPlaybackState 自訂動作,其中包含尚未設定的自訂動作。
未連接裝置 PlaybackState 額外項目包含鍵 SESSION_EXTRAS_KEY_SLOT_RESERVATION_SKIP_TO_NEXTtrue 布林值。
4 自訂 PlaybackState 自訂動作包含尚未設定的自訂動作。
5 自訂 PlaybackState 自訂動作包含尚未設定的自訂動作。

自訂動作會按照新增至 PlaybackState 的順序排列。

已自動將應用程式色彩主題套用至 WebView 內容

針對指定 Android 13 (API 級別 33) 以上版本的應用程式,setForceDark() 方法已淘汰,導致呼叫此方法時會產生免人工管理。

WebView 現在一律會根據應用程式的主題屬性 isLightTheme 設定媒體查詢 prefers-color-scheme。換句話說,如果 isLightThemetrue 或未指定,prefers-color-scheme 就是 light;否則為 dark。此行為表示,如果網頁內容支援,會自動套用淺色或深色樣式,以配合應用程式的主題。

對於大多數應用程式,新行為應自動套用適當的應用程式樣式,但建議您測試應用程式,檢查是否有任何可能手動控制深色模式設定的情況。

如果仍需自訂應用程式的色彩主題行為,請改用 setAlgorithmicDarkeningAllowed() 方法。為了提供與 Android 舊版本的回溯相容性,建議在 AndroidX 中使用對等的 setAlgorithmicDarkeningAllowed() 方法。

請參閱該方法的說明文件,進一步瞭解根據應用程式的 targetSdkVersion 和主題設定,可在應用程式中預期的行為。

連線能力

BluetoothAdapter#enable() 和 BluetoothAdapter#disable() 已淘汰

如果應用程式指定 Android 13 (API 級別 33) 以上版本,BluetoothAdapter#enable()BluetoothAdapter#disable() 方法已淘汰,並一律傳回 false

下列類型的應用程式不受上述異動影響:

  • 裝置擁有者應用程式
  • 設定檔擁有者應用程式
  • 系統應用程式

Google Play 服務

廣告 ID 的必要權限

如果應用程式使用 Google Play 服務廣告 ID,並以 Android 13 (API 級別 33) 以上版本為目標,必須在應用程式的資訊清單檔案中宣告 AD_ID 一般權限,如下所示:

<manifest ...>
    <!-- Required only if your app targets Android 13 or higher. -->
    <uses-permission android:name="com.google.android.gms.permission.AD_ID"/>

    <application ...>
        ...
    </application>
</manifest>

如果應用程式指定 Android 13 以上版本時未宣告這項權限,系統會自動移除廣告 ID,並以零字串取代。

如果應用程式使用的 SDK 在程式庫的資訊清單中宣告 AD_ID 權限,則根據預設,該權限會與應用程式的資訊清單檔案合併。在此情況下,您不需要在應用程式的資訊清單檔案中宣告權限。

詳情請參閱 Play 管理中心說明中心的「廣告 ID」一文。

更新非 SDK 限制

基於與 Android 開發人員合作及最新的內部測試,Android 13 包含更新後的受限制非 SDK 介面清單。在限制非 SDK 介面之前,我們盡可能確保公開替代方案的可得性。

如果您的應用程式並不是以 Android 13 為目標版本,則此處所述的某些變更可能不會立即對您造成影響。不過,雖然您目前可以使用某些非 SDK 介面 (視應用程式的目標 API 級別而定),但使用任何非 SDK 方法或欄位時,都會面臨應用程式中斷的高風險。

如果不確定應用程式是否使用非 SDK 介面,可對應用程式進行測試以便確認。如果您的應用程式仰賴非 SDK 介面,則建議您開始規劃遷移至 SDK 替代方案。我們瞭解有些應用程式可使用非 SDK 介面運作。如果您除了為應用程式中的某個功能使用非 SDK 介面外,已別無他法,則應要求新的公用 API

如要進一步瞭解此 Android 版本中的變更,請參閱 Android 13 的非 SDK 介面限制更新內容。 如要進一步瞭解非 SDK 介面的一般資訊,請參閱非 SDK 介面的限制