การล็อกแอป

การล็อกแอปช่วยให้ผู้ใช้รักษาความปลอดภัยของแต่ละแอปด้วยรหัส 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 Media App จาก 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>

การล็อกแอปจะรีเซ็ต PIN และล้างข้อมูลแอปส่วนตัวเมื่อผู้ใช้ตรวจสอบสิทธิ์ด้วยบัญชีที่มีประเภทตรงกับ config_recoveryAccountType

จัดรูปแบบโค้ดอ้างอิง

หากต้องการปรับแต่งโค้ดอ้างอิง ให้ใช้การวางซ้อนทรัพยากรขณะรันไทม์ (RRO) เพื่อวางซ้อน SensitiveAppLockOverlayableResources

เนื่องจากการล็อกแอปใช้ Car UI Library ดังนั้น RRO ของ Car UI Library ที่มีอยู่จึงใช้กับการล็อกแอปได้ด้วย

ปุ่มกด 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 คุณต้องเพิ่มบริการการล็อกแอปลงใน 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,
}

เนื่องจากโหมดผู้ใช้ระบบแบบไม่มี UI (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>