前言
目前 Google 已經發布了 Android 13 的正式版,雖然國內的手機能用上 Android 13 還有一段時間,不過開發者們可以通過模擬器來體驗,那么我們來看看 Android 13 都有哪些重要的改變,我們適配的話需要做哪些工作?
新功能和 API
先來看看 Android 13 帶來了哪些新的改變,這里我挑了一些對我們比較重要的來說。具體可以參考:
https://developer.android.google.cn/about/versions/13/features帶主題的應用圖標
讓應用圖標隨著主題換色。
首先應用要提供自適應圖標和單色應用圖標,并通過清單中的
然后需要用戶在系統設置中啟用帶主題的應用圖標。
這樣系統會根據壁紙和主題來確定色調顏色,然后該顏色將應用于單色應用圖標。
剪貼板預覽
從 Android 13 開始,將內容添加到剪貼板時,我們可以預覽復制的內容。如下:Android 13 也加入了對剪貼板敏感內容的脫敏處理,后面會詳細說。
提高了啟動畫面效率 Android 12 引入了 Splash Screen API,可以幫助開發者更好的開發啟動頁面,果不其然 Android 13 就進行了完善,包括下面兩項改動:
-
系統會直接從 AnimatedVectorDrawable 推斷動畫時長。在 Android 13 之前,必須直接設置 windowSplashScreenAnimationDuration;
-
使用新的 windowSplashScreenBehavior 屬性可以更好地控制應用是否始終在 Android 13 及更高版本中的啟動畫面上顯示該圖標。
廣播接收
在以前任何應用都可以向動態注冊的接收器發送不受保護的廣播,除非該接收器受簽名權限的保護。Android 13 允許用戶指定是否接受外部應用的廣播,前提是啟用了DYNAMIC_RECEIVER_EXPLICIT_EXPORT_REQUIRED 兼容性框架 (默認是關閉的)。
在注冊廣播的時候設置一個 Flag,如下:
context.registerReceiver(sharedBroadcastReceiver, intentFilter,
RECEIVER_EXPORTED)
context.registerReceiver(privateBroadcastReceiver, intentFilter,
RECEIVER_NOT_EXPORTED)
注意: 如果啟用了 DYNAMIC_RECEIVER_EXPLICIT_EXPORT_REQUIRED,在注冊廣播的時候就必須設置 RECEIVER_EXPORTED 或 RECEIVER_NOT_EXPORTED。
照片選擇器
Android 13 提供了照片選擇器,這樣無需向應用授予整個媒體庫的訪問權限。
使用照片選擇器需要 1.6.0-alpha05 或更高版本的 androidx.activity 庫,主要 API:
-
PickVisualMedia,用于選擇單張圖片或單個視頻。
-
PickMultipleVisualMedia,用于選擇多張圖片或多個視頻。
示例代碼如下:
val pickMedia = registerForActivityResult(PickVisualMedia()) { uri ->
if (uri != null) {
Log.d("PhotoPicker", "Selected URI: $uri")
} else {
Log.d("PhotoPicker", "No media selected")
}
}
pickMedia.launch(PickVisualMediaRequest(PickVisualMedia.ImageAndVideo))
pickMedia.launch(PickVisualMediaRequest(PickVisualMedia.ImageOnly))
pickMedia.launch(PickVisualMediaRequest(PickVisualMedia.VideoOnly))
val mimeType = "image/gif"
pickMedia.launch(PickVisualMediaRequest(PickVisualMedia.SingleMimeType(mimeType)))
附近 WIFI 設備新權限
Android 13 之前針對 WIFI 的權限是 ACCESS_FINE_LOCATION,即使我們不想定位只想查詢一下附近的 WIFI。Android 13 提供了一個新的運行時權限 NEARBY_WIFI_DEVICES 來專門針對這種情況,這個權限影響的 API 如下:-
WifiManager
-
startLocalOnlyHotspot()
-
-
WifiAwareManager
-
attach()
-
-
WifiAwareSession
-
publish()
-
subscribe()
-
-
WifiP2pManager
-
addLocalService()
-
connect()
-
createGroup()
-
discoverPeers()
-
discoverServices()
-
requestDeviceInfo()
-
requestGroupInfo()
-
requestPeers()
-
-
WifiRttManager
-
startRanging()
-
使用以上 API 需要申請 NEARBY_WIFI_DEVICES 權限。
精確鬧鐘權限
Android 13 提供了一個新的鬧鐘權限 USE_EXACT_ALARM,它類似于 SCHEDULE_EXACT_ALARM 不過是自動授權的,不需要用戶手動授權。
Google 對這個權限的要求是必須是鬧鐘、計時器或提供活動通知的日歷應用才可以使用,Google Play 會對使用這個權限的應用進行審核。不過目前國內還沒有限制,后續各大應用市場應該也會跟進限制。
適配 Android 13
下面來看看適配 Android 13 需要注意哪些事項。這里只列舉一些比較常用的功能,全部內容可以參考:
https://developer.android.google.cn/about/versions/13/behavior-changes-all 通知的運行時權限Android 13 (API 級別 33) 引入了運行時通知權限 POST_NOTIFICATIONS,如果應用以 Android 13 為目標平臺,當需要發送通知的時候就需要動態請求該權限,否則無法發出通知。
注意:媒體相關的通知不受這個權限的影響,依然可以正常進行通知;前臺服務的通知則受本權限影響。
可以通過 NotificationManager 的 areNotificationsEnabled() 來檢查應用是否可以發送通知。
剪切板脫敏
上面我們提到 Android 13 提供了剪切板預覽功能,但是如果復制的是敏感內容的話,可以在調用 ClipboardManager#setPrimaryClip() 之前向 ClipData 的 ClipDescription 添加一個標志,這樣預覽的時候就看不到敏感內容了。
代碼如下:
// When your app targets API level 33 or higher
clipData.apply {
description.extras = PersistableBundle().apply {
putBoolean(ClipDescription.EXTRA_IS_SENSITIVE, true)
}
}
// If your app targets a lower API level
clipData.apply {
description.extras = PersistableBundle().apply {
putBoolean("android.content.extra.IS_SENSITIVE", true)
}
}
添加標志后的效果如下:
附近 WIFI 設備新權限
上面提到了,針對附近 WIFI 設備提供了一個新的運行時權限 NEARBY_WIFI_DEVICES。
如果應用不會使用 WIFI 相關 API 進行定位,那么可以將 android:usesPermissionFlags 屬性設置為 neverForLocation:
<manifest ...>
<uses-permission android:name="android.permission.NEARBY_WIFI_DEVICES"
android:usesPermissionFlags="neverForLocation" />
<application ...>
...
application>
manifest>
因為 NEARBY_WIFI_DEVICES 只在 Android 13 上,所以我們還要保留 ACCESS_FINE_LOCATION 以應對 Android 12 及以下設備,不過可以為其設置最高 SDK 版本,如下:
<manifest ...>
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION"
android:maxSdkVersion="32" />
<application ...>
...
application>
manifest>
細化媒體權限 如果應用以 Android 13 為目標平臺,那么如果要訪問媒體文件時就不能像之前那樣請求 READ_EXTERNAL_STORAGE 權限,Android 13 提供了更加細化的權限,必須請求以下權限來代替:
媒體類型 |
請求權限 |
圖片和照片 |
READ_MEDIA_IMAGES |
視頻 | READ_MEDIA_VIDEO |
音頻文件 | READ_MEDIA_AUDIO |
這樣可以更加保護用戶的隱私。
如果同時請求 READ_MEDIA_IMAGES 權限和 READ_MEDIA_VIDEO 權限,只會顯示一個系統權限對話框。
注意: 如果您的應用只需要訪問圖片、照片和視頻,請考慮使用照片選擇器,而不是聲明 READ_MEDIA_IMAGES 和 READ_MEDIA_VIDEO 權限。
后臺使用身體傳感器的新權限
如果應用以 Android 13 為目標平臺,并且在后臺運行時需要訪問身體傳感器信息,那么除了現有的 BODY_SENSORS 權限外,還需要聲明新的 BODY_SENSORS_BACKGROUND 權限。
總結
以上就是 Android 13 版本中對開發者來說比較關心的新功能和適配方案,如果想了解更全面的信息,可以參考官方網站
審核編輯 :李倩
-
Android
+關注
關注
12文章
3935瀏覽量
127347 -
模擬器
+關注
關注
2文章
874瀏覽量
43208
原文標題:Android 13 帶來了哪些新功能?需要哪些適配工作?| 開發者說·DTalk
文章出處:【微信號:Google_Developers,微信公眾號:谷歌開發者】歡迎添加關注!文章轉載請注明出處。
發布評論請先 登錄
相關推薦
評論