行為變更:指定 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 介面的限制