五分鐘技術趣談 | Android 14更新升級淺析
Part 01
新特性
1.1 語法性別
正如漢語中的第三人稱有他、她、它一樣,很多語言根據不同性別、對象會有名詞、動詞和介詞上的語法差異,而使用區分性別語言的人高達30億,因此APP不針對性別進行語法區分的話,可能會給用戶帶來糟糕的使用體驗。
因此Android14推出全新特性:語法性別Grammar Gender。開發者可以調用專用API:GrammaticalInflectionManager設置單個APP的性別偏好:
setRequestedApplicationGrammaticalGender(int) :設置性別偏好,參數為常量類型,具體類型如下:
GRAMMATICAL_GENDER_NOT_SPECIFIED,0:尚未指定性別偏好,將用默認的values資源;
GRAMMATICAL_GENDER_NEUTRAL,1:指定中性、客觀的資源文本,比如 values-fr資源;
GRAMMATICAL_GENDER_FEMININE,2:指定針對女性的資源文本,比如 values-fr-feminine資源;
GRAMMATICAL_GENDER_MASCULINE,3:指定針對男性的資源文本,比如 values-fr-masculine資源。
方法getApplicationGrammaticalGender()用于獲取語法性別偏好,返回上述四種int類型。
做完性別語法配置后,需要在APP的manifest文件中聲明配置更改:
<activity android:name=".TestActivity"
android:configChanges="grammaticalGender"
android:exported="true">
</activity>
1.2 屏幕截圖檢測
基于對隱私權限相關方面的考慮,APP需要對截屏操作進行監聽和反饋,在以往的安卓版本,這些操作往往需要開發者監聽存放截屏文件的目錄來實現,稍不留神還會踩到“隱私紅線”。
為了創建更標準化的截圖檢測體驗,Android 14引入了一個保護隱私的截圖檢測API。這個API允許應用程序以每個活動為基礎注冊回調。當用戶在活動可見時截取屏幕截圖時,調用這些回調函數,并通知用戶。
首先要聲明新的權限:
<uses-permission android:name="android.permission.DETECT_SCREEN_CAPTURE" />
然后,完成以下步驟,在你的應用程序中的每個活動,用戶可能會捕獲屏幕截圖。
1.通過覆蓋onScreenCapture()函數實現回調。在這個回調中,你的應用程序可以采取行動,比如警告另一個用戶有人截取了消息對話的截圖。
final Activity.ScreenCaptureCallback screenCaptureCallback =
new Activity.ScreenCaptureCallback() {
@Override
public void onScreenCaptured() {
// Add logic to take action in your app.
}
};
2.在活動的onStart()方法中,注冊截圖回調:
@Override
protected void onStart() {
super.onStart();
registerScreenCaptureCallback(executor,
screenCaptureCallback);
}
3.最后在onStop()方法中,取消注冊屏幕回調:
@Override
protected void onStop() {
super.onStop();
unregisterScreenCaptureCallback(screenCaptureCallback);
}
1.3 全新的系統返回設計
在Android13中,為了應對多元的交互方式,谷歌就對返回事件進行了統一處理,在Android14對系統的返回效果進行了進一步的升級,一是為返回箭頭增加了邊框和背景,使其更加明顯;二是返回箭頭的顏色會隨著系統主題發生變化。
圖1 全新設計的“返回”箭頭
二是增加返回預覽,讓用戶可以提前查看目標界面,決定取消或繼續返回操作。這塊功能還在完善,開發者需要手動開啟:開發者選項->預測性返回手勢動畫。
圖2 返回預覽示意圖
1.4 軟件包安裝改進
在Android14中,PackageInstaller 推出了新的方法requestUserPreapproval(),該方法可以讓App在下載之前,請求用戶批準、獲取授權,相比于之前版本要等到apk下載完成進行安裝時才進行授權申請,該方法能有效避免無效下載,節約流程時間。
以往由于安卓設備上可能安裝了多個應用市場,當使用不同的應用市場對App進行更新操作后,可能會造成兼容性問題,因此在Android14中,新增了setRequestUpdateOwnership()方法,用于指定App后續更新的應用商店App,需要申請權限:android.permission.ENFORCE_UPDATE_OWNERSHIP
此后,如果App要變更負責更新應用商店,都需要獲取用戶的批準。
不知道你遇到過這種情況嗎,你正在使用一款App,然而手機應用商店觸發了自動更新條件,直接將該App的進程打斷,輕則讓你郁悶,重則會造成數據的丟失。為避免這種情況,Android14引入了新的安裝約束API:InstallConstraints,首先使用InstallConstraints.Builder構建,設置更新條件,如要求App進程不在前臺setAppNotForegroundRequired()、要求設備不在通話狀態setNotInCallRequired()等。然后使用commitSessionAfterInstallConstraintsAreMet()傳入上述InstallConstraints配置實例即可。
Part 02
版本適配改善
2.1 默認拒絕設定精準的鬧鐘
精確的鬧鐘適用于用戶指定的通知,或是在確切時間需要執行的操作。從Android 14開始,系統不再向以Android 13及更高版本為目標平臺的大多數新安裝應用預先授予SCHEDULE_EXACT_ALARM權限,該權限默認處于拒絕狀態。
需要SCHEDULE_EXACT_ALARM權限才能通過以下API啟動精確鬧鐘,否則系統會拋出安全異常
setExact()
setExactAndAllowWhileIdle()
setAlarmClock()
日歷或鬧鐘應用需要在應用停止運行時發送日歷提醒、喚醒鬧鐘或提醒。這些應用可以請求 USE_EXACT_ALARM 常規權限。系統將在安裝時授予 USE_EXACT_ALARM 權限,擁有此權限的應用將能夠像具有 SCHEDULE_EXACT_ALARM 權限的應用一樣安排精確鬧鐘。
2.2 應用只能終止自己的后臺進程
Android14增加了對應用調用方法killBackgroundProcesses()的限制,該方法用于終止API進程,只能終止本應用的后臺進程,更新后,如果傳入其他應用的包名,該方法不會對其他應用產生任何影響。
2.3 最低可安裝的目標API級別
從Android14開始,targetSdkVersion低于23的應用將無法被安裝,此舉旨在提高用戶的安全性和隱私性,一些惡意軟件通常會入侵一些API級別較低的設備,從而繞過最新版Android系統對用戶的保護,當嘗試在Android14設備上安裝低版本應用時,會顯示安裝失敗并拋出日志:INSTALL_FAILED_DEPRECATED_SDK_VERSION: App package must target at least SDK version 23
2.4 授予對照片和視頻的部分訪問限制
在Android14上,當應用請求READ_MEDIA_IMAGES或READ_MEDIA_VIDEO媒體權限時,用戶可以授予應用訪問部分照片和視頻的權限,新對話框顯示以下權限選項:
- 「選擇照片和視頻:」 Android 14 中的新功能,用戶選擇他們想要提供給應用的特定照片和視頻。
- 「全部允許」:用戶授予對設備上所有照片和視頻的完整庫訪問權限。
- 「不允許」:用戶拒絕所有訪問。
Part 03
總結
Android14在近兩個月應該會推出穩定版,本期分享主要對Beta版系統新特性和版本適配進行了簡要分析,之后 API 應該不會有大的變動。Android14針對UI交互和應用權限方面做出進一步地優化,給用戶帶來全新使用體驗的同時還兼顧了安全性和隱私性,不知道看完這篇分享的開發者和用戶小伙伴們對Android14有沒有更期待了呢,接下來讓我們一起靜待Android14穩定版的發布吧~