Tuỳ chỉnh Trung tâm an toàn

Bật hoặc tắt Trung tâm an toàn

Để bật hoặc tắt Trung tâm an toàn, hãy sử dụng tính năng lớp phủ Trường boolean config_enableSafetyCenter trong frameworks/base/core/res/res/values/config.xml .

Trên hầu hết thiết bị, Trung tâm an toàn được hỗ trợ theo mặc định, chẳng hạn như trên điện thoại và máy tính bảng. Trên một số kiểu dáng, Trung tâm an toàn được tắt theo mặc định, đối với ví dụ: trên Auto, TV và Wear.

<resources xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
    <!-- ... -->
   <!-- Determines whether SafetyCenter feature is enabled. -->
    <bool name="config_enableSafetyCenter">true</bool>
    <!-- ... -->
</resources>

Để hỗ trợ Trung tâm an toàn, hãy đặt config_enableSafetyCenter thành true. Nếu bạn không muốn hỗ trợ Trung tâm an toàn, hãy đặt giá trị này thành false để tắt.

Khi Trung tâm an toàn bị tắt, bất kỳ nỗ lực nào để chuyển hướng đến trang Bảo mật & Thay vào đó, trang Quyền riêng tư sẽ mở ứng dụng Cài đặt. Bất kỳ cố gắng tương tác nào với Các API tự động bị bỏ qua hoặc trả về một giá trị mặc định. Danh sách nhanh được liên kết Ô Cài đặt và mục Cài đặt cũng sẽ hiện hoặc bị ẩn, tuỳ thuộc vào việc Trung tâm an toàn đã được bật.

cờ DeviceConfig

Ngoài việc bật Trung tâm an toàn bằng config_enableSafetyCenter cấu hình, một DeviceConfig cờ (safety_center_is_enabled) dùng để bật hoặc tắt tính năng An toàn từ xa ở giữa.

Trong Android 14 trở lên, bạn không cần làm gì thêm vì cờ này là true theo mặc định.

Trên Android 13, Trung tâm an toàn sẽ tắt theo mặc định phía máy chủ và được bật bằng danh sách cho phép bằng cờ này. Gửi thiết bị của bạn vân tay số và liên hệ với TAM của bạn để được thêm vào danh sách cho phép. Lưu ý rằng Bạn cần có phiên bản dòng chính M-2022-11 trở lên để được thêm vào danh sách cho phép. Để phát triển và thử nghiệm cục bộ, bạn có thể bật hoặc tắt cờ trên thiết bị (cho đến khi khởi động lại) bằng lệnh adb. Ví dụ: để bật cờ:

adb root
adb shell device_config set_sync_disabled_for_tests until_reboot
adb shell device_config put privacy safety_center_is_enabled true

Đồng thời, để xác nhận xem Trung tâm an toàn đã được bật hay chưa:

adb root
adb shell cmd safety_center enabled

Kết quả sẽ cho biết liệu Trung tâm an toàn có được bật đúng cách trên thiết bị hay không.

Cập nhật tệp cấu hình

Sử dụng tệp cấu hình safety_center_config.xml để sửa đổi nội dung của màn hình Trung tâm an toàn. Bạn có thể phủ tệp này trong trường hợp bạn đã đáp ứng Yêu cầu về việc tuỳ chỉnh.

Lớp phủ tệp cấu hình

Để phủ tệp safety_center_config.xml, hãy xem phần Thay đổi giá trị của tệp tài nguyên của ứng dụng trong thời gian chạy để biết thông tin về cách sửa đổi lớp phủ tài nguyên trong thời gian chạy (RRO).

Trong Android 14, hãy nhớ phủ res/raw-v34/safety_center_config.xml chứ không phải là res/raw/safety_center_config.xml làm quy tắc ưu tiên (điều này cũng áp dụng cho các tệp khác trong phạm vi v34, ví dụ: res/values-v34/strings.xml). Gói lớp phủ phải có SDK tối thiểu thấp hơn 34, nếu không bộ hạn định v34 có thể bị xoá trong quá trình tối ưu hoá. Ngoài ra, hãy nhớ sử dụng lớp phủ tĩnh, vì giá trị này được tải xung quanh khi khởi động bất cứ lúc nào.

Đối với thiết bị Dự án nguồn mở Android (AOSP), hãy nhắm mục tiêu gói này com.android.safetycenter.resources. Không có cấu hình lớp phủ để . Tất cả các tài nguyên đều có thể phủ lên trên mà không bị hạn chế về nội dung.

Đối với các thiết bị GMS được định cấu hình để nhận bản cập nhật Mainline, hãy nhắm đến gói com.google.android.safetycenter.resources. Nhắm mục tiêu cấu hình SafetyCenterConfig. Cấu hình này yêu cầu gói lớp phủ phải nằm trong phân vùng product, system hoặc vendor. Nhà sản xuất thiết bị gốc GMS phải sao chép Google đã cung cấp safety_center_config.xml file và giới hạn những sửa đổi mà GTS cho phép kiểm thử. Định nghĩa lớp phủ phải gần như sau:

<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="your.overlay.package"
    android:versionCode="1"
    android:versionName="1.0">
    <application android:hasCode="false" />
    <overlay
      android:targetPackage="com.google.android.safetycenter.resources"
      android:targetName="SafetyCenterConfig"
      android:isStatic="true"
      android:priority="0"/>
</manifest>

Đối với thiết bị GMS không được định cấu hình để nhận bản cập nhật Mainline, hãy nhắm mục tiêu gói com.android.safetycenter.resources. Không có cấu hình lớp phủ để nhắm mục tiêu. Gói lớp phủ phải dùng tên gói com.google.android.safetycenter.resources.

Nhà sản xuất thiết bị gốc GMS phải sao chép tệp safety_center_config.xml do Google cung cấp và chỉ thực hiện sửa đổi đối với những sửa đổi được phép thử nghiệm GTS cho phép. OEM GMS cũng phải xác định các chuỗi được sử dụng trong cấu hình XML.

Cấu trúc tệp

Về tổng thể, tệp safety_center_config.xml là danh sách an toàn nguồn. Những nguồn an toàn này được sắp xếp theo nhóm để quản lý các tín hiệu trên màn hình Trung tâm an toàn, ví dụ: Bảo mật ứng dụng hoặc Khoá màn hình. Thứ tự của danh sách này xác định thứ tự hiển thị:

<safety-center-config> <!-- Wrapper for the Safety Center configuration -->
    <safety-sources-config>< !-- Wrapper for the safety sources groups -->
        <safety-sources-group> <!-- Contains information about a safety sources group -->
            <dynamic-safety-source /> <!-- Contains information about a safety source -->
            <!-- More safety sources in the group -->
        </safety-sources-group> <!-- More safety sources groups -->
    </safety-sources-config>
</safety-center-config>

Tệp cấu hình của Google

Tệp cấu hình AOSP nằm trong packages/modules/Permission/SafetyCenter/Resources/res/raw/safety_center_config.xml.

Trong Android 13, tệp cấu hình của Google sẽ là:

<safety-center-config>
    <safety-sources-config>
        <safety-sources-group
            id="GoogleAppSecuritySources"
            title="@com.google.android.safetycenter.resources:string/google_app_security_sources_title"
            summary="@com.google.android.safetycenter.resources:string/google_app_security_sources_summary">
            <dynamic-safety-source
                id="GooglePlayProtect"
                packageName="com.android.vending"
                profile="all_profiles"
                intentAction="com.google.android.finsky.PLAY_PROTECT"
                title="@com.google.android.safetycenter.resources:string/google_play_protect_title"
                titleForWork="@com.google.android.safetycenter.resources:string/google_play_protect_title_for_work"
                summary="@com.google.android.safetycenter.resources:string/google_play_protect_summary"
                searchTerms="@com.google.android.safetycenter.resources:string/google_play_protect_search_terms"
                refreshOnPageOpenAllowed="true"/>
            <dynamic-safety-source
                id="GoogleAppProtectionService"
                packageName="com.google.android.odad"
                profile="primary_profile_only"
                initialDisplayState="hidden"
                loggingAllowed="false"/>
        </safety-sources-group>
        <safety-sources-group
            id="AndroidLockScreenSources"
            title="@com.google.android.safetycenter.resources:string/google_lock_screen_sources_title"
            summary="@com.google.android.safetycenter.resources:string/google_lock_screen_sources_summary">
            <dynamic-safety-source
                id="AndroidLockScreen"
                packageName="com.android.settings"
                profile="primary_profile_only"
                title="@com.google.android.safetycenter.resources:string/google_lock_screen_title"
                summary="@com.google.android.safetycenter.resources:string/google_lock_screen_summary"
                searchTerms="@com.google.android.safetycenter.resources:string/google_lock_screen_search_terms"
                initialDisplayState="disabled"
                maxSeverityLevel="300"
                refreshOnPageOpenAllowed="true"/>
            <dynamic-safety-source
                id="AndroidBiometrics"
                packageName="com.android.settings"
                profile="primary_profile_only"
                title="@com.google.android.safetycenter.resources:string/google_biometrics_title"
                summary="@com.google.android.safetycenter.resources:string/google_biometrics_summary"
                searchTerms="@com.google.android.safetycenter.resources:string/google_biometrics_search_terms"
                initialDisplayState="@com.google.android.safetycenter.resources:string/google_biometrics_initial_display_state"
                maxSeverityLevel="0"
                refreshOnPageOpenAllowed="true"/>
        </safety-sources-group>
        <safety-sources-group
            id="GoogleAccountsSources"
            title="@com.google.android.safetycenter.resources:string/google_accounts_sources_title"
            summary="@com.google.android.safetycenter.resources:string/google_accounts_sources_summary">
            <dynamic-safety-source
                id="GoogleSecurityCheckup"
                packageName="com.google.android.gms"
                profile="all_profiles"
                intentAction="com.google.android.gms.accountsettings.action.SAFETY_CENTER_SECURITY_CHECKUP"
                title="@com.google.android.safetycenter.resources:string/google_security_checkup_title"
                titleForWork="@com.google.android.safetycenter.resources:string/google_security_checkup_title_for_work"
                summary="@com.google.android.safetycenter.resources:string/google_security_checkup_summary"
                searchTerms="@com.google.android.safetycenter.resources:string/google_security_checkup_search_terms"
                refreshOnPageOpenAllowed="true"/>
        </safety-sources-group>
        <safety-sources-group
            id="GoogleDeviceFinderSources"
            title="@com.google.android.safetycenter.resources:string/google_device_finder_sources_title"
            summary="@com.google.android.safetycenter.resources:string/google_device_finder_sources_summary">
            <dynamic-safety-source
                id="GoogleFindMyDevice"
                packageName="com.google.android.gms"
                profile="primary_profile_only"
                intentAction="com.google.android.gms.settings.FIND_MY_DEVICE_SETTINGS"
                title="@com.google.android.safetycenter.resources:string/google_find_my_device_title"
                summary="@com.google.android.safetycenter.resources:string/google_find_my_device_summary"
                searchTerms="@com.google.android.safetycenter.resources:string/google_find_my_device_search_terms"
                refreshOnPageOpenAllowed="true"/>
            <dynamic-safety-source
                id="GoogleRogueTag"
                packageName="com.google.android.gms"
                profile="primary_profile_only"
                initialDisplayState="hidden"
                refreshOnPageOpenAllowed="true"/>
        </safety-sources-group>
        <safety-sources-group
            id="GoogleUpdateSources"
            title="@com.google.android.safetycenter.resources:string/google_updates_title"
            summary="@com.google.android.safetycenter.resources:string/google_updates_summary">
            <dynamic-safety-source
                id="GoogleSecurityUpdates"
                packageName="com.google.android.gms"
                profile="primary_profile_only"
                intentAction="@com.google.android.safetycenter.resources:string/google_security_updates_intent"
                title="@com.google.android.safetycenter.resources:string/google_security_updates_title"
                summary="@com.google.android.safetycenter.resources:string/google_security_updates_summary"
                searchTerms="@com.google.android.safetycenter.resources:string/google_security_updates_search_terms"
                refreshOnPageOpenAllowed="true"/>
            <dynamic-safety-source
                id="GooglePlaySystemUpdate"
                packageName="com.android.vending"
                profile="primary_profile_only"
                intentAction="android.settings.MODULE_UPDATE_SETTINGS"
                title="@com.google.android.safetycenter.resources:string/google_play_system_update_title"
                summary="@com.google.android.safetycenter.resources:string/google_play_system_update_summary"
                searchTerms="@com.google.android.safetycenter.resources:string/google_play_system_update_search_terms"
                refreshOnPageOpenAllowed="true"/>
        </safety-sources-group>
        <safety-sources-group
            id="AndroidPrivacySources"
            title="@com.google.android.safetycenter.resources:string/google_privacy_sources_title"
            summary="@com.google.android.safetycenter.resources:string/google_privacy_sources_summary"
            statelessIconType="privacy">
            <static-safety-source
                id="AndroidPermissionUsage"
                profile="primary_profile_only"
                intentAction="android.intent.action.REVIEW_PERMISSION_USAGE"
                title="@com.google.android.safetycenter.resources:string/google_permission_usage_title"
                summary="@com.google.android.safetycenter.resources:string/google_permission_usage_summary"
                searchTerms="@com.google.android.safetycenter.resources:string/google_permission_usage_search_terms"/>
            <static-safety-source
                id="AndroidPermissionManager"
                profile="primary_profile_only"
                intentAction="android.intent.action.MANAGE_PERMISSIONS"
                title="@com.google.android.safetycenter.resources:string/google_permission_manager_title"
                summary="@com.google.android.safetycenter.resources:string/google_permission_manager_summary"
                searchTerms="@com.google.android.safetycenter.resources:string/google_permission_manager_search_terms"/>
            <static-safety-source
                id="AndroidPrivacyControls"
                profile="primary_profile_only"
                intentAction="android.settings.PRIVACY_CONTROLS"
                title="@com.google.android.safetycenter.resources:string/google_privacy_controls_title"
                summary="@com.google.android.safetycenter.resources:string/google_privacy_controls_summary"
                searchTerms="@com.google.android.safetycenter.resources:string/google_privacy_controls_search_terms"/>
            <issue-only-safety-source
                id="AndroidAccessibility"
                packageName="com.google.android.permissioncontroller"
                profile="all_profiles"
                refreshOnPageOpenAllowed="true"/>
            <issue-only-safety-source
                id="AndroidNotificationListener"
                packageName="com.google.android.permissioncontroller"
                profile="primary_profile_only"
                refreshOnPageOpenAllowed="true"/>
            <issue-only-safety-source
                id="AndroidBackgroundLocation"
                packageName="com.google.android.permissioncontroller"
                profile="all_profiles"
                refreshOnPageOpenAllowed="true"/>
            <issue-only-safety-source
                id="AndroidPermissionAutoRevoke"
                packageName="com.google.android.permissioncontroller"
                profile="all_profiles"
                refreshOnPageOpenAllowed="true"/>
        </safety-sources-group>
        <safety-sources-group
            id="AndroidAdvancedSources"
            title="@com.google.android.safetycenter.resources:string/google_advanced_title">
            <dynamic-safety-source
                id="AndroidWorkPolicyInfo"
                packageName="com.google.android.permissioncontroller"
                profile="primary_profile_only"
                initialDisplayState="hidden"
                refreshOnPageOpenAllowed="true"/>
            <static-safety-source
                id="AndroidAdvancedSecurity"
                profile="primary_profile_only"
                intentAction="com.android.settings.security.SECURITY_ADVANCED_SETTINGS"
                title="@com.google.android.safetycenter.resources:string/google_advanced_security_title"
                summary="@com.google.android.safetycenter.resources:string/google_advanced_security_summary"
                searchTerms="@com.google.android.safetycenter.resources:string/google_advanced_security_search_terms"/>
            <static-safety-source
                id="AndroidAdvancedPrivacy"
                profile="primary_profile_only"
                intentAction="android.settings.PRIVACY_ADVANCED_SETTINGS"
                title="@com.google.android.safetycenter.resources:string/google_advanced_privacy_title"
                summary="@com.google.android.safetycenter.resources:string/google_advanced_privacy_summary"
                searchTerms="@com.google.android.safetycenter.resources:string/google_advanced_privacy_search_terms"/>
        </safety-sources-group>
    </safety-sources-config>
</safety-center-config>

Trong Android 14, tệp cấu hình của Google sẽ là:

<safety-center-config>
    <safety-sources-config>
        <safety-sources-group
            id="GoogleAppSecuritySources"
            title="@com.google.android.safetycenter.resources:string/google_app_security_sources_title"
            summary="@com.google.android.safetycenter.resources:string/google_app_security_sources_summary">
            <dynamic-safety-source
                id="GooglePlayProtect"
                packageName="com.android.vending"
                profile="all_profiles"
                intentAction="com.google.android.finsky.PLAY_PROTECT"
                title="@com.google.android.safetycenter.resources:string/google_play_protect_title"
                titleForWork="@com.google.android.safetycenter.resources:string/google_play_protect_title_for_work"
                summary="@com.google.android.safetycenter.resources:string/google_play_protect_summary"
                searchTerms="@com.google.android.safetycenter.resources:string/google_play_protect_search_terms"
                notificationsAllowed="true"
                packageCertificateHashes="1975b2f17177bc89a5dff31f9e64a6cae281a53dc1d1d59b1d147fe1c82afa00,f0fd6c5b410f25cb25c3b53346c8972fae30f8ee7411df910480ad6b2d60db83,d22cc500299fb22873a01a010de1c82fbe4d061119b94814dd301dab50cb7678,7ce83c1b71f3d572fed04c8d40c5cb10ff75e6d87d9df6fbd53f0468c2905053"
                deduplicationGroup="AppSecurity"/>
            <issue-only-safety-source
                id="GoogleAppProtectionService"
                packageName="com.google.android.odad"
                profile="primary_profile_only"
                loggingAllowed="false"
                deduplicationGroup="AppSecurity"/>
        </safety-sources-group>
        <safety-sources-group
            id="AndroidLockScreenSources"
            title="@com.google.android.safetycenter.resources:string/google_lock_screen_sources_title"
            summary="@com.google.android.safetycenter.resources:string/google_lock_screen_sources_summary">
            <dynamic-safety-source
                id="AndroidLockScreen"
                packageName="com.android.settings"
                profile="primary_profile_only"
                title="@com.google.android.safetycenter.resources:string/google_lock_screen_title"
                summary="@com.google.android.safetycenter.resources:string/google_lock_screen_summary"
                searchTerms="@com.google.android.safetycenter.resources:string/google_lock_screen_search_terms"
                initialDisplayState="disabled"
                notificationsAllowed="true"
                maxSeverityLevel="300"/>
            <dynamic-safety-source
                id="AndroidBiometrics"
                packageName="com.android.settings"
                profile="all_profiles"
                title="@com.google.android.safetycenter.resources:string/google_biometrics_title"
                titleForWork="@com.google.android.safetycenter.resources:string/google_biometrics_title_for_work"
                summary="@com.google.android.safetycenter.resources:string/google_biometrics_summary"
                searchTerms="@com.google.android.safetycenter.resources:string/google_biometrics_search_terms"
                initialDisplayState="@com.google.android.safetycenter.resources:string/google_biometrics_initial_display_state"
                maxSeverityLevel="0"/>
        </safety-sources-group>
        <safety-sources-group
            id="GoogleAccountsSources"
            title="@com.google.android.safetycenter.resources:string/google_accounts_sources_title"
            summary="@com.google.android.safetycenter.resources:string/google_accounts_sources_summary">
            <dynamic-safety-source
                id="GoogleSecurityCheckup"
                packageName="com.google.android.gms"
                profile="all_profiles"
                intentAction="com.google.android.gms.accountsettings.action.SAFETY_CENTER_SECURITY_CHECKUP"
                title="@com.google.android.safetycenter.resources:string/google_security_checkup_title"
                titleForWork="@com.google.android.safetycenter.resources:string/google_security_checkup_title_for_work"
                summary="@com.google.android.safetycenter.resources:string/google_security_checkup_summary"
                searchTerms="@com.google.android.safetycenter.resources:string/google_security_checkup_search_terms"
                deduplicationGroup="AccountRequired"
                packageCertificateHashes="1975b2f17177bc89a5dff31f9e64a6cae281a53dc1d1d59b1d147fe1c82afa00,f0fd6c5b410f25cb25c3b53346c8972fae30f8ee7411df910480ad6b2d60db83,d22cc500299fb22873a01a010de1c82fbe4d061119b94814dd301dab50cb7678,7ce83c1b71f3d572fed04c8d40c5cb10ff75e6d87d9df6fbd53f0468c2905053"
                refreshOnPageOpenAllowed="true"/>
            <dynamic-safety-source
                id="GooglePasswordCheckup"
                packageName="com.google.android.gms"
                profile="all_profiles"
                title="@com.google.android.safetycenter.resources:string/google_password_checkup_title"
                titleForWork="@com.google.android.safetycenter.resources:string/google_password_checkup_title_for_work"
                searchTerms="@com.google.android.safetycenter.resources:string/google_password_checkup_search_terms"
                initialDisplayState="hidden"
                notificationsAllowed="true"
                deduplicationGroup="AccountRequired"
                packageCertificateHashes="1975b2f17177bc89a5dff31f9e64a6cae281a53dc1d1d59b1d147fe1c82afa00,f0fd6c5b410f25cb25c3b53346c8972fae30f8ee7411df910480ad6b2d60db83,d22cc500299fb22873a01a010de1c82fbe4d061119b94814dd301dab50cb7678,7ce83c1b71f3d572fed04c8d40c5cb10ff75e6d87d9df6fbd53f0468c2905053"
                refreshOnPageOpenAllowed="false"/>
        </safety-sources-group>
        <safety-sources-group
            id="GoogleDeviceFinderSources"
            title="@com.google.android.safetycenter.resources:string/google_device_finder_sources_title"
            summary="@com.google.android.safetycenter.resources:string/google_device_finder_sources_summary">
            <dynamic-safety-source
                id="GoogleFindMyDevice"
                packageName="com.google.android.gms"
                profile="primary_profile_only"
                intentAction="com.google.android.gms.settings.FIND_MY_DEVICE_SETTINGS"
                title="@com.google.android.safetycenter.resources:string/google_find_my_device_title"
                summary="@com.google.android.safetycenter.resources:string/google_find_my_device_summary"
                notificationsAllowed="true"
                deduplicationGroup="AccountRequired"
                packageCertificateHashes="1975b2f17177bc89a5dff31f9e64a6cae281a53dc1d1d59b1d147fe1c82afa00,f0fd6c5b410f25cb25c3b53346c8972fae30f8ee7411df910480ad6b2d60db83,d22cc500299fb22873a01a010de1c82fbe4d061119b94814dd301dab50cb7678,7ce83c1b71f3d572fed04c8d40c5cb10ff75e6d87d9df6fbd53f0468c2905053"
                searchTerms="@com.google.android.safetycenter.resources:string/google_find_my_device_search_terms"/>
            <dynamic-safety-source
                id="GoogleRogueTag"
                packageName="com.google.android.gms"
                profile="primary_profile_only"
                packageCertificateHashes="1975b2f17177bc89a5dff31f9e64a6cae281a53dc1d1d59b1d147fe1c82afa00,f0fd6c5b410f25cb25c3b53346c8972fae30f8ee7411df910480ad6b2d60db83,d22cc500299fb22873a01a010de1c82fbe4d061119b94814dd301dab50cb7678,7ce83c1b71f3d572fed04c8d40c5cb10ff75e6d87d9df6fbd53f0468c2905053"
                initialDisplayState="hidden"/>
        </safety-sources-group>
        <safety-sources-group
            id="GoogleUpdateSources"
            title="@com.google.android.safetycenter.resources:string/google_updates_title"
            summary="@com.google.android.safetycenter.resources:string/google_updates_summary">
            <dynamic-safety-source
                id="GoogleSecurityUpdates"
                packageName="com.google.android.gms"
                profile="primary_profile_only"
                intentAction="@com.google.android.safetycenter.resources:string/google_security_updates_intent"
                title="@com.google.android.safetycenter.resources:string/google_security_updates_title"
                summary="@com.google.android.safetycenter.resources:string/google_security_updates_summary"
                notificationsAllowed="true"
                packageCertificateHashes="1975b2f17177bc89a5dff31f9e64a6cae281a53dc1d1d59b1d147fe1c82afa00,f0fd6c5b410f25cb25c3b53346c8972fae30f8ee7411df910480ad6b2d60db83,d22cc500299fb22873a01a010de1c82fbe4d061119b94814dd301dab50cb7678,7ce83c1b71f3d572fed04c8d40c5cb10ff75e6d87d9df6fbd53f0468c2905053"
                searchTerms="@com.google.android.safetycenter.resources:string/google_security_updates_search_terms"/>
            <dynamic-safety-source
                id="GooglePlaySystemUpdate"
                packageName="com.android.vending"
                profile="primary_profile_only"
                intentAction="android.settings.MODULE_UPDATE_SETTINGS"
                title="@com.google.android.safetycenter.resources:string/google_play_system_update_title"
                summary="@com.google.android.safetycenter.resources:string/google_play_system_update_summary"
                notificationsAllowed="true"
                deduplicationGroup="AccountRequired"
                packageCertificateHashes="1975b2f17177bc89a5dff31f9e64a6cae281a53dc1d1d59b1d147fe1c82afa00,f0fd6c5b410f25cb25c3b53346c8972fae30f8ee7411df910480ad6b2d60db83,d22cc500299fb22873a01a010de1c82fbe4d061119b94814dd301dab50cb7678,7ce83c1b71f3d572fed04c8d40c5cb10ff75e6d87d9df6fbd53f0468c2905053"
                searchTerms="@com.google.android.safetycenter.resources:string/google_play_system_update_search_terms"/>
            <dynamic-safety-source
                id="GoogleBackupAndRestore"
                packageName="com.google.android.gms"
                profile="primary_profile_only"
                initialDisplayState="hidden"
                title="@com.google.android.safetycenter.resources:string/google_backup_title"
                packageCertificateHashes="1975b2f17177bc89a5dff31f9e64a6cae281a53dc1d1d59b1d147fe1c82afa00,f0fd6c5b410f25cb25c3b53346c8972fae30f8ee7411df910480ad6b2d60db83,d22cc500299fb22873a01a010de1c82fbe4d061119b94814dd301dab50cb7678,7ce83c1b71f3d572fed04c8d40c5cb10ff75e6d87d9df6fbd53f0468c2905053"
                searchTerms="@com.google.android.safetycenter.resources:string/google_backup_search_terms"/>
        </safety-sources-group>
        <safety-sources-group
            id="AndroidPrivacySources"
            title="@com.google.android.safetycenter.resources:string/google_privacy_sources_title"
            summary="@com.google.android.safetycenter.resources:string/google_privacy_sources_summary"
            statelessIconType="privacy">
            <static-safety-source
                id="AndroidPermissionManager"
                profile="primary_profile_only"
                intentAction="android.intent.action.MANAGE_PERMISSIONS"
                title="@com.google.android.safetycenter.resources:string/google_permission_manager_title"
                summary="@com.google.android.safetycenter.resources:string/google_permission_manager_summary"
                searchTerms="@com.google.android.safetycenter.resources:string/google_permission_manager_search_terms"/>
            <static-safety-source
                id="AndroidPermissionUsage"
                profile="primary_profile_only"
                intentAction="android.intent.action.REVIEW_PERMISSION_USAGE"
                title="@com.google.android.safetycenter.resources:string/google_permission_usage_title"
                summary="@com.google.android.safetycenter.resources:string/google_permission_usage_summary"
                searchTerms="@com.google.android.safetycenter.resources:string/google_permission_usage_search_terms"/>
            <static-safety-source
                id="GoogleAdsIdentity"
                profile="all_profiles"
                packageName="com.google.android.gms"
                intentAction="com.google.android.gms.adsidentity.ACTION_ADS_IDENTITY_SETTINGS"
                title="@com.google.android.safetycenter.resources:string/google_ads_identity_title"
                titleForWork="@com.google.android.safetycenter.resources:string/google_ads_identity_title_for_work"
                summary="@com.google.android.safetycenter.resources:string/google_ads_identity_summary"
                searchTerms="@com.google.android.safetycenter.resources:string/google_ads_identity_search_terms"/>
            <dynamic-safety-source
                id="AndroidHealthConnect"
                profile="primary_profile_only"
                packageName="com.google.android.healthconnect.controller"
                initialDisplayState="hidden"
                refreshOnPageOpenAllowed="false"
                title="@com.google.android.safetycenter.resources:string/google_health_connect_title"
                searchTerms="@com.google.android.safetycenter.resources:string/google_health_connect_search_terms"/>
            <dynamic-safety-source
                id="AndroidPrivacyAppDataSharingUpdates"
                packageName="com.google.android.permissioncontroller"
                profile="primary_profile_only"
                initialDisplayState="hidden"
                refreshOnPageOpenAllowed="true"
                title="@com.google.android.safetycenter.resources:string/google_app_data_sharing_updates_title"
                searchTerms="@com.google.android.safetycenter.resources:string/google_app_data_sharing_updates_search_terms"/>
            <static-safety-source
                id="AndroidPrivacyControls"
                profile="primary_profile_only"
                intentAction="android.settings.PRIVACY_CONTROLS"
                title="@com.google.android.safetycenter.resources:string/google_privacy_controls_title"
                summary="@com.google.android.safetycenter.resources:string/google_privacy_controls_summary"
                searchTerms="@com.google.android.safetycenter.resources:string/google_privacy_controls_search_terms"/>
            <static-safety-source
                id="GoogleActivityControls"
                profile="all_profiles"
                packageName="com.google.android.gms"
                intentAction="com.google.android.gms.accountsettings.action.ACTIVITY_CONTROLS"
                title="@com.google.android.safetycenter.resources:string/google_activity_controls_title"
                titleForWork="@com.google.android.safetycenter.resources:string/google_activity_controls_title_for_work"
                summary="@com.google.android.safetycenter.resources:string/google_activity_controls_summary"
                searchTerms="@com.google.android.safetycenter.resources:string/google_activity_controls_search_terms"/>
            <issue-only-safety-source
                id="AndroidAccessibility"
                packageName="com.google.android.permissioncontroller"
                profile="all_profiles"
                notificationsAllowed="true"
                refreshOnPageOpenAllowed="true"/>
            <issue-only-safety-source
                id="AndroidNotificationListener"
                packageName="com.google.android.permissioncontroller"
                profile="primary_profile_only"
                notificationsAllowed="true"
                refreshOnPageOpenAllowed="true"/>
            <issue-only-safety-source
                id="AndroidBackgroundLocation"
                packageName="com.google.android.permissioncontroller"
                profile="all_profiles"
                notificationsAllowed="true"
                refreshOnPageOpenAllowed="true"/>
            <issue-only-safety-source
                id="AndroidPermissionAutoRevoke"
                packageName="com.google.android.permissioncontroller"
                profile="all_profiles"
                notificationsAllowed="true"
                refreshOnPageOpenAllowed="true"/>
        </safety-sources-group>
        <safety-sources-group
            id="AndroidAdvancedSources"
            title="@com.google.android.safetycenter.resources:string/google_advanced_title">
            <dynamic-safety-source
                id="AndroidWorkPolicyInfo"
                packageName="com.google.android.permissioncontroller"
                profile="primary_profile_only"
                title="@com.google.android.safetycenter.resources:string/google_work_policy_title"
                initialDisplayState="hidden"
                refreshOnPageOpenAllowed="true"/>
            <static-safety-source
                id="AndroidMoreSettings"
                profile="primary_profile_only"
                intentAction="com.android.settings.MORE_SECURITY_PRIVACY_SETTINGS"
                title="@com.google.android.safetycenter.resources:string/google_more_settings_title"
                summary="@com.google.android.safetycenter.resources:string/google_more_settings_summary"
                searchTerms="@com.google.android.safetycenter.resources:string/google_more_settings_search_terms"/>
        </safety-sources-group>
    </safety-sources-config>
</safety-center-config>

Tuỳ chỉnh các nguồn trong Trung tâm an toàn

Các loại nguồn của Trung tâm an toàn

Nguồn có thể là động, chỉ có vấn đề hoặc tĩnh, dựa trên loại dữ liệu của chúng cung cấp cho Trung tâm an toàn.

Nguồn động

Đánh dấu nguồn an toàn là dynamic-safety-source nếu nguồn đó có thể cung cấp dữ liệu động vào Trung tâm an toàn cả về mục nhập lẫn thẻ cảnh báo tiềm năng:

<dynamic-safety-source
    id="AndroidLockScreen"
    packageName="com.android.settings"
    profile="primary_profile_only"
    title="@com.google.android.safetycenter.resources:string/google_lock_screen_title"
    summary="@com.google.android.safetycenter.resources:string/google_lock_screen_summary"
    searchTerms="@com.google.android.safetycenter.resources:string/google_lock_screen_search_terms"
    initialDisplayState="disabled"
    maxSeverityLevel="300"
    refreshOnPageOpenAllowed="true"/>

Nguồn chỉ báo cáo vấn đề

Đánh dấu nguồn là issue-only-safety-source nếu có không có chế độ cài đặt nào được liên kết nhưng hệ thống vẫn đưa ra cảnh báo. Bạn chỉ có thể đưa ra cảnh báo; đang cung cấp mục nhập cài đặt dẫn đến lỗi:

<issue-only-safety-source
    id="AndroidAccessibility"
    packageName="com.google.android.permissioncontroller"
    profile="all_profiles"
    refreshOnPageOpenAllowed="true"/>

Nguồn tĩnh

Đánh dấu nguồn là static-safety-source nếu đó là một mục chuyển hướng không có dữ liệu động:

<static-safety-source
    id="AndroidAdvancedSecurity"
    profile="primary_profile_only"
    intentAction="com.google.android.settings.security.SECURITY_ADVANCED_SETTINGS"
    title="@com.google.android.safetycenter.resources:string/google_advanced_security_title"
    summary="@com.google.android.safetycenter.resources:string/google_advanced_security_summary"
    searchTerms="@com.google.android.safetycenter.resources:string/google_advanced_security_search_terms"/>

Cấu hình nguồn của Trung tâm an toàn

Tuỳ thuộc vào loại nguồn của Trung tâm an toàn và các bất biến thể khác, cấu hình các trường tệp là không bắt buộc, bắt buộc hoặc bị cấm và có thể tuỳ chỉnh:

  • id
    • Giá trị nhận dạng duy nhất của nguồn an toàn phải là duy nhất trong toàn bộ và chỉ được chứa các chữ cái (a-z, A-Z) và có phân biệt chữ hoa chữ thường
    • Loại chuỗi
    • Bắt buộc đối với tất cả các loại nguồn an toàn
  • packageName
    • Tên của gói sở hữu nguồn an toàn này, ví dụ: com.google.android.permissioncontroller
    • Loại chuỗi
    • Bắt buộc đối với nguồn an toàn linh động và chỉ xảy ra sự cố
    • Bị cấm đối với các nguồn an toàn tĩnh trong Android 13; trong Android 14. có thể tuỳ ý đặt để nhắm mục tiêu intentAction của nguồn một cách rõ ràng thay vì ngầm ẩn (xem giải pháp giải quyết ý định tài liệu để biết thêm chi tiết)
  • initialDisplayState
    • Cách mục nhập trên giao diện người dùng xuất hiện khi tính năng an toàn không cung cấp dữ liệu nguồn
    • Loại enum được biểu thị dưới dạng chuỗi, phải là một trong các loại sau:
      • enabled (mặc định, hiển thị bình thường)
      • disabled (hiển thị có màu xám, không thể nhấp vào)
      • hidden (không hiển thị)
    • Không bắt buộc đối với các nguồn an toàn động (mặc định là enabled)
    • Bị cấm đối với các nguồn an toàn tĩnh và chỉ cung cấp vấn đề
  • profile
    • Liệu nguồn an toàn này có tương tác với hồ sơ được quản lý của người dùng hay không
    • Loại enum được biểu thị dưới dạng chuỗi, phải là một trong các loại sau:
      • primary_profile_only (chỉ tương tác với hồ sơ gốc)
      • all_profiles (cũng có thể tương tác với(các) hồ sơ được quản lý)
    • Trên all_profiles, một số mục nhập giao diện người dùng sẽ được tạo (một mục nhập cho hồ sơ) cha mẹ và một URL cho mỗi hồ sơ được quản lý); nguồn an toàn có thể cung cấp dữ liệu khác nhau cho từng hồ sơ
    • Bắt buộc đối với tất cả các nguồn an toàn
  • searchTerms
    • Danh sách cụm từ tìm kiếm liên quan đến mục Trung tâm an toàn khi sử dụng tìm kiếm trong ứng dụng Cài đặt
    • Mã tài nguyên được thể hiện dưới dạng tên tài nguyên đủ điều kiện, ví dụ: @package:string/my_search_terms
    • Không bắt buộc đối với nguồn an toàn động và tĩnh (mặc định là không tìm kiếm các điều khoản)
    • Bị cấm đối với các nguồn an toàn chỉ cho vấn đề
  • title
    • Tiêu đề mặc định của mục nhập trên giao diện người dùng, được dùng khi không có dữ liệu nào được cung cấp linh động theo nguồn
    • Mã tài nguyên được thể hiện dưới dạng tên tài nguyên đủ điều kiện, ví dụ: @package:string/my_title
    • Bắt buộc đối với nguồn an toàn động và tĩnh (trừ phi initialDisplayState="hidden" không có searchTerms)
    • Bị cấm đối với các nguồn an toàn chỉ cho vấn đề
  • titleForWork
    • Tiêu đề mặc định của mục nhập trên giao diện người dùng cho hồ sơ được quản lý được dùng khi dữ liệu không được nguồn cung cấp động
    • Mã tài nguyên được thể hiện dưới dạng tên tài nguyên đủ điều kiện, ví dụ: @package:string/my_title_for_work
    • Bắt buộc đối với nguồn an toàn động và tĩnh đã chỉ định profile="all_profiles" (trừ khi initialDisplayState="hidden" không có searchTerms)
    • Cấm đối với các nguồn an toàn chỉ có vấn đề hoặc các nguồn có profile="primary_profile_only"
  • summary
    • Bản tóm tắt mặc định về mục nhập trên giao diện người dùng (đây là phần mô tả dạng văn bản dài hơn hiển thị bên dưới tiêu đề), được sử dụng khi dữ liệu không được cung cấp động bởi nguồn
    • Mã tài nguyên được thể hiện dưới dạng tên tài nguyên đủ điều kiện, ví dụ: @package:string/my_summary
    • Không bắt buộc đối với các nguồn an toàn tĩnh (mặc định là không có bản tóm tắt)
    • Bắt buộc đối với các nguồn an toàn động (trừ phi initialDisplayStatehidden)
    • Bị cấm đối với các nguồn an toàn chỉ cho vấn đề
  • intentAction
    • Thao tác sẽ kích hoạt khi người dùng nhấp vào mục nhập trên giao diện người dùng
    • Loại chuỗi, ví dụ: com.google.android.settings.security.SECURITY_ADVANCED_SETTINGS hoặc mã nhận dạng tài nguyên được thể hiện dưới dạng tên tài nguyên đủ điều kiện, ví dụ: @package:string/my_intent_action
    • Nếu thao tác theo ý định này không phân giải được cho packageName đã cho (nếu bất kỳ), mục nhập giao diện người dùng sẽ hoạt động theo cách tương tự như initialDisplayState="disabled"
    • Bắt buộc đối với các nguồn an toàn tĩnh và dynamic nguồn an toàn có initialDisplayState="enabled"
    • Bị cấm đối với các nguồn an toàn chỉ cho vấn đề
  • maxSeverityLevel
    • Mức độ nghiêm trọng tối đa mà nguồn Trung tâm an toàn này có thể cung cấp
    • Số nguyên được biểu thị dưới dạng chuỗi, ví dụ: 300
    • Không bắt buộc đối với các nguồn an toàn động và chỉ xảy ra sự cố (mặc định là không tối đa)
    • Nghiêm cấm đối với các nguồn an toàn tĩnh
  • loggingAllowed
    • Trung tâm an toàn có thể ghi nhật ký hoạt động tương tác hoặc dữ liệu liên quan đến nguồn
    • Boolean được biểu thị dưới dạng chuỗi, ví dụ: false
    • Không bắt buộc đối với các nguồn an toàn động và chỉ xảy ra sự cố (mặc định là true)
    • Nghiêm cấm đối với các nguồn an toàn tĩnh
  • refreshOnPageOpenAllowed
    • Liệu có nên gửi tín hiệu đến nguồn an toàn để làm mới dữ liệu hay không khi màn hình Trung tâm an toàn được mở
    • Boolean được biểu thị dưới dạng chuỗi, ví dụ: true
    • Không bắt buộc đối với các nguồn an toàn động và chỉ xảy ra sự cố (mặc định là false)
    • Nghiêm cấm đối với các nguồn an toàn tĩnh
  • notificationsAllowed (Kể từ Android 14)
    • Liệu nguồn an toàn có thể cung cấp thông báo (không bắt buộc) khi báo cáo sự cố
    • Boolean được biểu thị dưới dạng chuỗi, ví dụ: true
    • Không bắt buộc đối với các nguồn an toàn động và chỉ xảy ra sự cố (mặc định là false)
    • Nghiêm cấm đối với các nguồn an toàn tĩnh
  • deduplicationGroup (Kể từ Android 14)
    • Một giá trị nhận dạng riêng biệt tiềm năng có thể dùng để loại bỏ các vấn đề trùng lặp đến từ nhiều nguồn. Các nguồn trong cùng một loại bỏ trùng lặp nhóm có thể gửi sự cố với mã nhận dạng loại bỏ trùng lặp không bắt buộc. Vấn đề với cùng một mã nhận dạng loại bỏ trùng lặp sẽ chỉ hiển thị một lần trong giao diện người dùng, ngay cả khi đang gửi chúng.
    • Loại chuỗi
    • Không bắt buộc đối với các nguồn an toàn động và chỉ xảy ra sự cố (mặc định là không loại bỏ trùng lặp)
    • Nghiêm cấm đối với các nguồn an toàn tĩnh
  • packageCertificateHashes (Kể từ Android 14)
    • Danh sách hàm băm chứng chỉ được phân tách bằng dấu phẩy cho packageName. Nếu bạn đặt chế độ này, chứng chỉ kiểm tra sẽ được thực hiện dựa trên packageCertificateHashes đã cho cho packageName được cung cấp khi tương tác với nguồn an toàn, cho cho mục đích bảo mật.
    • Loại chuỗi
    • Không bắt buộc đối với các nguồn an toàn động và chỉ xảy ra sự cố (mặc định là không kiểm tra chứng chỉ)
    • Nghiêm cấm đối với các nguồn an toàn tĩnh

Tuỳ chỉnh nhóm nguồn trong Trung tâm an toàn

Các nguồn của Trung tâm an toàn phải được chứa trong một nhóm nguồn của Trung tâm an toàn. Mỗi nhóm nguồn được hiển thị trong giao diện người dùng theo thứ tự mà các Nhóm nguồn được liệt kê trong tệp. Mỗi nguồn hiển thị trong nhóm theo thứ tự Các nguồn được liệt kê trong tệp này. Nếu nhóm này chỉ chứa một nguồn an toàn, hồ sơ được hiển thị dưới dạng một mục nhập duy nhất thay vì một nhóm.

Cấu hình nhóm nguồn của Trung tâm an toàn

Hãy dùng các biến sau để tuỳ chỉnh các nhóm nguồn của Trung tâm an toàn:

  • id
    • Giá trị nhận dạng duy nhất của nhóm nguồn an toàn; phải là duy nhất trong toàn bộ tệp
    • Loại chuỗi
    • Bắt buộc
  • title
    • Tiêu đề của nhóm trong giao diện người dùng
    • Mã tài nguyên được thể hiện dưới dạng tên tài nguyên đủ điều kiện, ví dụ: @package:string/my_title
    • Bắt buộc nếu có ít nhất một nguồn an toàn động hoặc tĩnh trong nhóm (tức là nhóm không phải là type="hidden")
  • summary
    • Nội dung mô tả ngắn gọn về nhóm trong giao diện người dùng, hiển thị bên dưới tiêu đề. Hiển thị trong những điều kiện cụ thể, thường là khi dữ liệu không được cung cấp; nếu không, bản tóm tắt sẽ được tính toán dựa trên dữ liệu do nguồn trong nhóm.
    • Mã tài nguyên được thể hiện dưới dạng tên tài nguyên đủ điều kiện, ví dụ: @package:string/my_summary
    • Không bắt buộc (mặc định là không có nội dung tóm tắt)
  • statelessIconType
    • Loại biểu tượng hiển thị cho nhóm khi không có trạng thái nào được cung cấp bởi các nguồn an toàn, ví dụ: các mục nhập tĩnh
    • Loại enum được biểu thị dưới dạng chuỗi phải là none hoặc privacy (loại biểu tượng quyền riêng tư)
    • Không bắt buộc (mặc định là none)
  • type (Kể từ Android 14)
    • Một loại rõ ràng để đủ điều kiện về cách nhóm này tương tác với Trung tâm an toàn
    • Loại enum được biểu thị dưới dạng chuỗi, phải là một trong các loại sau:
      • stateful (hiển thị và đóng góp cho Trung tâm an toàn tổng thể trạng thái)
      • stateless (hiển thị và không đóng góp vào Mức độ an toàn tổng thể Trạng thái trung tâm)
      • hidden (không hiển thị, tất cả các nguồn chỉ được là vấn đề)
    • Không bắt buộc, được suy luận theo mặc định bằng cách sử dụng các nguồn an toàn có trong nhóm cũng như summarystatelessIconType. Nếu type được chỉ định một số bất biến thể bổ sung được thực thi để đảm bảo khớp với các nguồn có trong nhóm (ví dụ: nhóm không được là hidden nếu chứa các mục nhập mà người dùng thấy được)

Các loại nhóm nguồn của Trung tâm an toàn

Các nhóm nguồn của Trung tâm an toàn được phân loại là có trạng thái, không có trạng thái hoặc bị ẩn, dựa trên trạng thái của một số trường nhất định.

Nhóm trạng thái

Một nhóm có cả tiêu đề và phần tóm tắt, hoặc stateLessIconType="privacy" là được coi là có trạng thái đóng góp vào trạng thái chung của Trung tâm an toàn:

<safety-sources-group
    id="GoogleAppSecuritySources"
    title="@com.google.android.safetycenter.resources:string/google_app_security_sources_title"
    summary="@com.google.android.safetycenter.resources:string/google_app_security_sources_summary">
    <dynamic-safety-source
        id="GooglePlayProtect"
        packageName="com.android.vending"
        profile="all_profiles"
        intentAction="com.google.android.finsky.PLAY_PROTECT"
        title="@com.google.android.safetycenter.resources:string/google_play_protect_title"
        titleForWork="@com.google.android.safetycenter.resources:string/google_play_protect_title_for_work"
        summary="@com.google.android.safetycenter.resources:string/google_play_protect_summary"
        searchTerms="@com.google.android.safetycenter.resources:string/google_play_protect_search_terms"
        refreshOnPageOpenAllowed="true"/>
    <dynamic-safety-source
        id="GoogleAppProtectionService"
        packageName="com.google.android.odad"
        profile="primary_profile_only"
        initialDisplayState="hidden"
        loggingAllowed="false"/>
</safety-sources-group>

Trong Android 13, một nhóm như vậy sẽ hiển thị dưới dạng có thể thu gọn trong giao diện người dùng. Trên Android 14, thông tin này sẽ hiển thị dưới dạng mục nhập có trạng thái riêng chuyển hướng đến trang con.

Nhóm không có trạng thái

Một nhóm có tiêu đề nhưng không có bản tóm tắt, và stateLessIconType="none" là được coi là không có trạng thái và không đóng góp vào trạng thái chung của Trung tâm an toàn:

<safety-sources-group
    id="AndroidPrivacySources"
    title="@com.google.android.safetycenter.resources:string/google_privacy_sources_title"
    summary="@com.google.android.safetycenter.resources:string/google_privacy_sources_summary"
    statelessIconType="privacy">
    <static-safety-source
        id="AndroidPermissionUsage"
        profile="primary_profile_only"
        intentAction="android.intent.action.REVIEW_PERMISSION_USAGE"
        title="@com.google.android.safetycenter.resources:string/google_permission_usage_title"
        summary="@com.google.android.safetycenter.resources:string/google_permission_usage_summary"
        searchTerms="@com.google.android.safetycenter.resources:string/google_permission_usage_search_terms"/>
    <static-safety-source
        id="AndroidPermissionManager"
        profile="primary_profile_only"
        intentAction="android.intent.action.MANAGE_PERMISSIONS"
        title="@com.google.android.safetycenter.resources:string/google_permission_manager_title"
        summary="@com.google.android.safetycenter.resources:string/google_permission_manager_summary"
        searchTerms="@com.google.android.safetycenter.resources:string/google_permission_manager_search_terms"/>
    <static-safety-source
        id="AndroidPrivacyControls"
        profile="primary_profile_only"
        intentAction="android.settings.PRIVACY_CONTROLS"
        title="@com.google.android.safetycenter.resources:string/google_privacy_controls_title"
        summary="@com.google.android.safetycenter.resources:string/google_privacy_controls_summary"
        searchTerms="@com.google.android.safetycenter.resources:string/google_privacy_controls_search_terms"/>
    <issue-only-safety-source
        id="AndroidAccessibility"
        packageName="com.google.android.permissioncontroller"
        profile="all_profiles"
        refreshOnPageOpenAllowed="true"/>
    <issue-only-safety-source
        id="AndroidNotificationListener"
        packageName="com.google.android.permissioncontroller"
        profile="primary_profile_only"
        refreshOnPageOpenAllowed="true"/>
    <issue-only-safety-source
        id="AndroidBackgroundLocation"
        packageName="com.google.android.permissioncontroller"
        profile="all_profiles"
        refreshOnPageOpenAllowed="true"/>
    <issue-only-safety-source
        id="AndroidPermissionAutoRevoke"
        packageName="com.google.android.permissioncontroller"
        profile="all_profiles"
        refreshOnPageOpenAllowed="true"/>
</safety-sources-group>

Một nhóm như vậy sẽ hiển thị dưới dạng danh sách các mục nhập cố định trong giao diện người dùng.

Nhóm bị ẩn

Nhóm bị ẩn chỉ chứa các nguồn an toàn chỉ có vấn đề và không có tiêu đề. Nhóm bị ẩn sẽ không xuất hiện trong giao diện người dùng:

<safety-sources-group
    id="HiddenGroup">
    <issue-only-safety-source
        id="AndroidAccessibility"
        packageName="com.google.android.permissioncontroller"
        profile="all_profiles"
        refreshOnPageOpenAllowed="true"/>
</safety-sources-group>

Dữ liệu động cho mục nhập tĩnh

Bạn có thể hiển thị nguồn động của Trung tâm an toàn dưới dạng mục nhập tĩnh, cho phép đẩy các mục nhập chuyển hướng tuỳ thuộc vào một số điều kiện và cho phép tuỳ chỉnh nội dung của mình trong thời gian chạy. Xác định nguồn động trong một nhóm không có trạng thái, cho chẳng hạn như tuỳ thuộc vào mục thông tin về chính sách của nơi bạn làm việc.

Ví dụ này cho thấy một nguồn an toàn động không cung cấp tín hiệu an toàn. vì nó nằm trong nhóm không có trạng thái:

<safety-sources-group
    id="AndroidAdvancedSources"
    title="@com.google.android.safetycenter.resources:string/google_advanced_title">
    <dynamic-safety-source
        id="AndroidWorkPolicyInfo"
        packageName="com.google.android.permissioncontroller"
        profile="primary_profile_only"
        initialDisplayState="hidden"
        refreshOnPageOpenAllowed="true"/>
            <!-- … -->
</safety-sources-group>

Trong ví dụ này, nguồn chỉ có thể đẩy thẻ cảnh báo màu xanh lục và cung cấp trạng thái không xác định. Để có thể cung cấp dữ liệu khác, nguồn phải nằm trong một nhóm có trạng thái.

Tuỳ chỉnh chuỗi và trường lớp phủ

Đối với các thiết bị GMS không được định cấu hình để nhận bản cập nhật Mainline, thay vì phủ toàn bộ tệp cấu hình, bạn có thể phủ 6 tài nguyên chuỗi để đáp ứng mọi nhu cầu tuỳ chỉnh. Tài nguyên chuỗi là lớp phủ được liệt kê trong bảng.

Tài nguyên chuỗi Mô tả
google_lock_screen_sources_summary Phủ giá trị này để xác định một bản tóm tắt tĩnh sẽ hiển thị cho nhóm AndroidLockScreenSources khi tất cả các nguồn trong nhóm đang ở trạng thái tốt (thông tin hoặc mức độ nghiêm trọng không xác định cấp độ). Theo mặc định, Trung tâm an toàn hiển thị tiêu đề của tất cả các nguồn trong nhóm được nối làm phần tóm tắt cho nhóm.
google_biometrics_title Phủ giá trị này để xác định một tiêu đề tĩnh cho nguồn sinh trắc học thuộc sở hữu của gói com.android.settings được sử dụng khi không có do nguồn cung cấp. Lớp phủ này khi cũng phủ tiêu đề do nguồn cung cấp động trong Gói com.android.settings. Chế độ này sẽ bị bỏ qua theo mặc định vì trạng thái hiển thị ban đầu của nguồn là hidden.
google_biometrics_summary Phủ giá trị này để xác định một bản tóm tắt tĩnh cho dữ liệu sinh trắc học nguồn do gói com.android.settings sở hữu được dùng khi không có dữ liệu động nào được cung cấp từ nguồn. Người bỏ qua mặc định vì trạng thái hiển thị ban đầu cho nguồn là hidden.
google_biometrics_search_terms Phủ giá trị này để xác định danh sách cụm từ tìm kiếm cho hệ thống nhận dạng sinh trắc học nguồn do gói com.android.settings sở hữu.
google_biometrics_initial_display_state Phủ giá trị này để hiển thị một mục nhập trên giao diện người dùng cho nguồn sinh trắc học được sở hữu theo gói com.android.settings khi không có dữ liệu động do nguồn này cung cấp. Giá trị mặc định là hidden.
google_security_updates_intent Phủ giá trị này để thay đổi ý định cần thiết để mở hoạt động cho phép người dùng kiểm tra và cài đặt bản cập nhật bảo mật. Chiến dịch này thao tác theo ý định phải được liên kết với một hoạt động đã xuất. Chiến lược phát hành đĩa đơn giá trị mặc định là android.settings.SYSTEM_UPDATE_SETTINGS.

Không có chuỗi nào khác trong gói com.google.android.safetycenter.resources là có thể phủ lên trên.

Đối với thiết bị AOSP, tất cả tài nguyên trong com.android.safetycenter.resources có thể phủ lên trên mà không bị hạn chế về nội dung.

Đối với thiết bị GMS không được định cấu hình để nhận bản cập nhật Mainline, hãy tạo một Thay thế hoặc phủ gói com.google.android.safetycenter.resources com.android.safetycenter.resources xác định tất cả các chuỗi mà thử nghiệm GTS.

Những chuỗi này là:

  • google_app_security_sources_title
  • google_app_security_sources_summary
  • google_play_protect_title
  • google_play_protect_title_for_work
  • google_play_protect_summary
  • google_play_protect_search_terms
  • google_lock_screen_sources_title
  • google_lock_screen_sources_summary
  • google_lock_screen_title
  • google_lock_screen_summary
  • google_lock_screen_search_terms
  • google_biometrics_title
  • google_biometrics_summary
  • google_biometrics_search_terms
  • google_biometrics_initial_display_state
  • google_accounts_sources_title
  • google_accounts_sources_summary
  • google_security_checkup_title
  • google_security_checkup_title_for_work
  • google_security_checkup_summary
  • google_security_checkup_search_terms
  • google_device_finder_sources_title
  • google_device_finder_sources_summary
  • google_find_my_device_title
  • google_find_my_device_summary
  • google_find_my_device_search_terms
  • google_updates_title
  • google_updates_summary
  • google_security_updates_title
  • google_security_updates_summary
  • google_security_updates_search_terms
  • google_security_updates_intent
  • google_play_system_update_title
  • google_play_system_update_summary
  • google_play_system_update_search_terms
  • google_privacy_sources_title
  • google_privacy_sources_summary
  • google_permission_usage_title
  • google_permission_usage_summary
  • google_permission_usage_search_terms
  • google_permission_manager_title
  • google_permission_manager_summary
  • google_permission_manager_search_terms
  • google_privacy_controls_title
  • google_privacy_controls_summary
  • google_privacy_controls_search_terms
  • google_advanced_title
  • google_advanced_security_title
  • google_advanced_security_summary
  • google_advanced_security_search_terms
  • google_advanced_privacy_title
  • google_advanced_privacy_summary
  • google_advanced_privacy_search_terms

Yêu cầu về việc tuỳ chỉnh

Yêu cầu về định dạng tệp

Tệp cấu hình phải là tệp XML và tuân theo định dạng được mô tả trong Cập nhật tệp cấu hình. Tệp này phải ở raw thư mục. Phiên bản này phải đáp ứng các giá trị bất biến được mô tả trong phần Tuỳ chỉnh Trung tâm an toàn nguồnTuỳ chỉnh các nguồn trong Trung tâm an toàn nhóm. Nếu không được định dạng đúng với các yêu cầu nêu trên, bị tắt hoàn toàn. Quá trình phân tích cú pháp tệp này cũng được CTS và GTS hỗ trợ các lượt kiểm thử có thể cung cấp thêm ngữ cảnh trong trường hợp tệp không được định dạng đúng (trên đầu logcat nhật ký thiết bị).

Thiết bị sử dụng các dịch vụ của Google

Trên thiết bị GMS, một số quy tắc ràng buộc được áp dụng cho tệp này. Được hỗ trợ bởi GTS (Dịch vụ kỹ thuật số) kiểm thử.

Thiết bị AOSP (Dự án nguồn mở Android)

Trên thiết bị AOSP, tệp cấu hình phải được định dạng đúng và vượt qua CTS các bài kiểm thử về Sự an toàn ở giữa. Kiểm thử xác minh rằng tệp được định dạng đúng. Thiết bị GMS cũng phải vượt qua các bài kiểm thử này.