使用者可以透過應用程式鎖定功能,使用專屬 PIN 碼保護個別應用程式。避免訪客或次要使用者存取敏感資料,特別是主要使用者不在車內時。
應用程式鎖定功能與設定檔鎖定功能各自獨立運作。這項設計可讓使用者彈性保護特定機密應用程式,不必鎖定整個使用者設定檔。
在 Android 14 (API 級別 34) 以上版本中,應用程式鎖定功能會以獨立應用程式的形式提供。您可以獨立開發這類應用程式,不必使用核心 Android Automotive OS (AAOS) 平台。不過,您必須將「應用程式鎖定」應用程式部署為平台簽署的權限應用程式,並納入平台映像檔。
使用者安裝應用程式時,系統會通知他們應用程式鎖定功能:
圖 1. 安裝應用程式後,系統會顯示應用程式鎖定通知。
應用程式鎖定功能預設為停用。啟用這項功能後,系統會提示使用者設定 PIN 碼。之後如要存取受「應用程式鎖定」保護的應用程式,都必須輸入這個 PIN 碼:
圖 2. 應用程式鎖定設定。
使用者嘗試開啟已鎖定的應用程式時,系統會提示輸入應用程式鎖定 PIN 碼:
圖 3. 嘗試開啟已鎖定的應用程式時,系統會顯示「應用程式鎖定」提示。
設定應用程式鎖定功能
如要套用應用程式設定,請編輯 res/values/config.xml:
<resources>
<!--A customizable list of system packages that appear in the App Lock settings. -->
<string-array name="system_lockable_packages">
<item>com.android.car.calendar</item>
</string-array>
<!-- Config for allowing locking of media apps. -->
<bool name="config_enableMediaAppsLocking">true</bool>
<!-- Default account type used for recovering pin. -->
<string name="config_recoveryAccountType" translatable="false">com.google</string>
</resources>
自訂可鎖定的應用程式
根據預設,系統應用程式無法鎖定。您可以使用 system_lockable_packages 設定,指定可鎖定的系統應用程式。
設定、導航應用程式和語音助理等核心應用程式無法鎖定,否則可能會導致系統行為無法預測。
如要為系統應用程式啟用應用程式鎖定功能,請使用 system_lockable_packages 清單:
<!-- List of system packages that appear in the App Lock settings. -->
<string-array name="system_lockable_packages">
<item>com.android.car.calendar</item>
</string-array>
設定媒體暫停功能
如果平台支援 Car-apps-release 17 以上版本的車用媒體應用程式,媒體應用程式預設會處於鎖定狀態。如果您的應用程式不支援 Car-apps-release 17 以上版本,可以停用媒體應用程式鎖定功能:
<!-- Config for allowing locking of media apps. -->
<bool name="config_enableMediaAppsLocking">false</bool>
設定復原流程
使用者可能會忘記應用程式鎖定 PIN 碼。使用 config_recoveryAccountType 自訂用於 PIN 碼復原的帳戶類型。
<!-- Default account type used for recovering pin. -->
<string name="config_recoveryAccountType" translatable="false">com.google</string>
當使用者透過與 config_recoveryAccountType 相符的帳戶類型進行驗證時,應用程式鎖定功能會重設 PIN 碼並清除私人應用程式資料。
設定參考代碼的樣式
如要自訂參照程式碼,請使用執行階段資源疊加層 (RRO) 疊加 SensitiveAppLockOverlayableResources。
由於應用程式鎖定功能使用 Car UI 程式庫,因此現有的 Car UI 程式庫 RRO 也可套用至應用程式鎖定功能。
PIN 碼鍵盤按鍵的樣式與 styles.xml 中定義的樣式相同:
<style name="PinPadKey" parent="Widget.CarUi.Button">
<item name="android:textSize">@dimen/pin_pad_key_text_size</item>
<item name="android:layout_height">@dimen/pin_pad_key_diameter</item>
<item name="android:layout_width">@dimen/pin_pad_key_diameter</item>
…
</style>
您也可以定義 PIN 碼鍵盤尺寸:
<resources>
<!-- Default dimensions for PIN pad view -->
<dimen name="pin_pad_title_text_size">44sp</dimen>
<dimen name="pin_pad_subtitle_text_size">32sp</dimen>
<dimen name="pin_pad_key_diameter">96dp</dimen>
<dimen name="pin_pad_key_text_size">32sp</dimen>
<dimen name="pin_pad_key_padding">0dp</dimen>
<dimen name="pin_pad_row_spacing">10dp</dimen>
<dimen name="pin_pad_col_spacing">12dp</dimen>
</resources>
支援暫停至 RAM
如要支援暫停至 RAM,您必須將 App Lock 服務新增至 config_earlyStartupServices:
<string-array translatable="false" name="config_earlyStartupServices">
<!-- App Lock Persistent Background Service -->
<item>com.android.car.sensitiveapplock/.service.PersistentBackgroundService#bind=bind,user=foreground,trigger=userUnlocked</item>
</string-array>
建構設定
應用程式鎖定功能需要系統特殊權限,支援應用程式鎖定的平台也必須宣告系統功能 com.android.car.sensitive_app_lock。
在 com.android.car.sensitiveapplock.xml 中新增功能宣告和權限:
<permissions>
<feature name="com.android.car.sensitive_app_lock"/>
<privapp-permissions package="com.android.car.sensitiveapplock">
<permission name="android.permission.GET_ACCOUNTS_PRIVILEGED" />
<permission name="android.permission.QUERY_USERS" />
<permission name="android.permission.MEDIA_CONTENT_CONTROL" />
<permission name="android.car.permission.CAR_POWER" />
<permission name="android.permission.POST_NOTIFICATIONS" />
</privapp-permissions>
</permissions>
應用程式鎖定必須在 Android.bp 檔案中匯入為已簽署的系統應用程式:
android_app_import {
name: "AppLock",
apk: "AppLock.apk",
certificate: "platform",
privileged: true,
required: [
"privapp-com.android.car.sensitiveapplock",
],
optional_uses_libs: [
"androidx.window.extensions",
"androidx.window.sidecar",
"com.android.oem.tokens", /* For Android 16+ */
],
}
prebuilt_etc {
name: "privapp-com.android.car.sensitiveapplock",
sub_dir: "permissions",
src: "com.android.car.sensitiveapplock.xml",
filename_from_src: true,
}
由於無頭系統使用者模式 (HSUM) 和訪客使用者不支援應用程式鎖定,因此您只能在次要設定檔中啟用應用程式鎖定。使用這項設定為次要使用者啟用應用程式。
舉例來說,在 preinstalled-packages.xml 中:
<config>
…
<!-- Config for the Sensitive App Lock app -->
<install-in-user-type package="com.android.car.sensitiveapplock">
<!-- Sensitive App Lock is only available to secondary users. Do not install app in Guest users. -->
<install-in user-type="android.os.usertype.full.SECONDARY" />
</install-in-user-type>
</config>