การล็อกแอป

การล็อกแอปช่วยให้ผู้ใช้รักษาความปลอดภัยของแอปแต่ละแอปด้วยรหัส PIN ที่ไม่ซ้ำกันได้ ซึ่งจะช่วยปกป้อง ข้อมูลที่ละเอียดอ่อนจากการเข้าถึงของผู้มาเยือนหรือผู้ใช้รอง โดยเฉพาะเมื่อ ผู้ใช้หลักไม่ได้อยู่ในรถ

การล็อกแอปจะทำงานแยกต่างหากจากการล็อกโปรไฟล์ การออกแบบนี้ช่วยให้ผู้ใช้ มีความยืดหยุ่นในการรักษาความปลอดภัยของแอปที่มีความละเอียดอ่อนโดยเฉพาะโดยไม่ต้องล็อก ทั้งโปรไฟล์ผู้ใช้

การล็อกแอปพร้อมใช้งานเป็นแอปที่ไม่ได้รวมไว้ใน Android 14 (ระดับ API 34) ขึ้นไป คุณสามารถพัฒนาแอปนี้แยกจากแพลตฟอร์มหลักของ Android Automotive OS (AAOS) ได้ อย่างไรก็ตาม คุณต้องติดตั้งใช้งานแอป App Lock เป็นแอปที่มีสิทธิ์ระดับสูงที่แพลตฟอร์มลงนาม ซึ่งรวมอยู่ในอิมเมจแพลตฟอร์ม

ผู้ใช้จะได้รับแจ้งเกี่ยวกับฟีเจอร์การล็อกแอปเมื่อติดตั้งแอป

การแจ้งเตือนการล็อกแอปจะแสดงหลังจากติดตั้งแอป
แล้ว

รูปที่ 1 การแจ้งเตือนการล็อกแอปจะแสดงหลังจากติดตั้งแอป

การล็อกแอปจะปิดอยู่โดยค่าเริ่มต้น เมื่อเปิดใช้ฟีเจอร์นี้ ระบบจะแจ้งให้ผู้ใช้ ตั้งค่า PIN จากนั้นคุณจะต้องใช้ PIN นี้เพื่อเข้าถึงแอปที่ App Lock รักษาความปลอดภัยไว้

การตั้งค่า
การล็อกแอป

รูปที่ 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>

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

จัดรูปแบบรหัสอ้างอิง

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

เนื่องจาก App Lock ใช้ไลบรารี UI ของรถยนต์ คุณจึงใช้ RRO ของไลบรารี UI ของรถยนต์ที่มีอยู่กับ App Lock ได้ด้วย

ปุ่มกด 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,
}

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