和先前版本一樣,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 裝置的權限。
精細媒體權限
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 分別顯示其在手機和平板電腦上的顯示情形範例。
![媒體控制項在手機和平板電腦裝置上的顯示方式,採用範例軌跡呈現按鈕的顯示方式](https://cdn.statically.io/img/developer.android.com/static/images/about/versions/13/media-controls-phone-tablet.png?hl=zh-tw)
在 Android 13 之前,系統會依照「加入」的順序,顯示最多五個動作來自 MediaStyle
通知的動作。以精簡模式為例 (例如在收合的快速設定中),系統會顯示最多三個以 setShowActionsInCompactView()
指定的動作。
從 Android 13 開始,系統會根據 PlaybackState
顯示最多五個動作按鈕,如下表所述。在精簡模式下,系統只會顯示前三個動作版位。如果應用程式未指定 Android 13 或不含 PlaybackState
,系統會根據上一段所述,根據新增至 MediaStyle
通知的 Action
清單顯示控制項。
版位 | 動作 | 條件 |
---|---|---|
1 | 播放 |
PlaybackState 的目前狀態為下列其中一種狀態:
|
載入中的旋轉圖示 |
PlaybackState 的目前狀態為下列其中一種狀態:
|
|
暫停 | PlaybackState 的目前狀態並非上述項目。 |
|
2 | 上一頁 | PlaybackState 操作包含 ACTION_SKIP_TO_PREVIOUS 。 |
自訂 | PlaybackState 動作不包含 ACTION_SKIP_TO_PREVIOUS 和 PlaybackState 自訂動作,其中包含尚未設定的自訂動作。 |
|
空白 | PlaybackState 額外項目包含鍵 SESSION_EXTRAS_KEY_SLOT_RESERVATION_SKIP_TO_PREV 的 true 布林值。 |
|
3 | 繼續 | PlaybackState 操作包含 ACTION_SKIP_TO_NEXT 。 |
自訂 | PlaybackState 動作不包含 ACTION_SKIP_TO_NEXT 和 PlaybackState 自訂動作,其中包含尚未設定的自訂動作。 |
|
空白 | PlaybackState 額外項目包含鍵 SESSION_EXTRAS_KEY_SLOT_RESERVATION_SKIP_TO_NEXT 的 true 布林值。 |
|
4 | 自訂 | PlaybackState 自訂動作包含尚未設定的自訂動作。 |
5 | 自訂 | PlaybackState 自訂動作包含尚未設定的自訂動作。 |
自訂動作會按照新增至 PlaybackState
的順序排列。
已自動將應用程式色彩主題套用至 WebView 內容
針對指定 Android 13 (API 級別 33) 以上版本的應用程式,setForceDark()
方法已淘汰,導致呼叫此方法時會產生免人工管理。
WebView 現在一律會根據應用程式的主題屬性 isLightTheme
設定媒體查詢 prefers-color-scheme
。換句話說,如果 isLightTheme
是 true
或未指定,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 介面的限制。