El bloqueo de apps permite que los usuarios protejan apps individuales con un código PIN único. Esto protege los datos sensibles del acceso de invitados o usuarios secundarios, en especial cuando el usuario principal no está en el vehículo.
El bloqueo de apps funciona de forma independiente del bloqueo de perfil. Este diseño les brinda a los usuarios la flexibilidad de proteger apps sensibles específicas sin necesidad de bloquear todo el perfil de usuario.
El bloqueo de apps está disponible como una app no agrupada en Android 14 (nivel de API 34) y versiones posteriores. Puedes desarrollar esta app por separado de la plataforma principal del SO Android Automotive (AAOS). Sin embargo, debes implementar la app de bloqueo de apps como una app con privilegios firmada por la plataforma que se incluye con la imagen de la plataforma.
Se informa a los usuarios sobre la función de bloqueo de apps cuando instalan apps:
Figura 1: Notificación de bloqueo de apps que se muestra después de instalar una app
El bloqueo de apps está inhabilitado de forma predeterminada. Cuando se habilita la función, se le solicita al usuario que establezca un PIN. Posteriormente, se requiere este PIN para acceder a cualquier app protegida por el bloqueo de apps:
Figura 2: Configuración de bloqueo de apps
Cuando se intenta abrir una app bloqueada, se le solicita al usuario que ingrese el código PIN de bloqueo de apps:
Figura 3: Solicitud de bloqueo de apps cuando se intenta abrir una app bloqueada
Configura el bloqueo de apps
Para aplicar la configuración de la app, edita 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>
Personaliza las apps bloqueables
De forma predeterminada, las apps del sistema no se pueden bloquear. Puedes especificar las apps del sistema que se pueden bloquear con la configuración system_lockable_packages.
Las apps principales, como la configuración, las apps de navegación y los asistentes de voz, no se pueden bloquear porque hacerlo podría causar un comportamiento impredecible del sistema.
Para habilitar el bloqueo de apps para una app del sistema, usa la lista 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>
Configura la suspensión de contenido multimedia
De forma predeterminada, las apps de contenido multimedia se pueden bloquear si la plataforma admite la app de contenido multimedia para vehículos de Car-apps-release 17 o versiones posteriores. Si no admites Car-apps-release 17 o versiones posteriores, puedes inhabilitar el bloqueo de apps de contenido multimedia:
<!-- Config for allowing locking of media apps. -->
<bool name="config_enableMediaAppsLocking">false</bool>
Configura un flujo de recuperación
Es posible que los usuarios olviden su PIN de bloqueo de apps. Usa config_recoveryAccountType para personalizar el tipo de cuenta que se usa para la recuperación del PIN.
<!-- Default account type used for recovering pin. -->
<string name="config_recoveryAccountType" translatable="false">com.google</string>
El bloqueo de apps restablece el PIN y borra los datos de app privada cuando un usuario se autentica con una cuenta con el tipo que coincide con config_recoveryAccountType.
Define el estilo del código de referencia
Para personalizar el código de referencia, usa superposiciones de recursos de tiempo de ejecución (RRO) para superponer
SensitiveAppLockOverlayableResources.
Dado que el bloqueo de apps usa la biblioteca de IU para vehículos, las RRO de la biblioteca de IU para vehículos existentes también se pueden aplicar al bloqueo de apps.
Las claves del teclado numérico usan el mismo estilo que se define en 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>
También puedes definir las dimensiones del teclado numérico:
<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>
Admite la suspensión a RAM
Para admitir la suspensión a RAM, debes agregar el servicio de bloqueo de apps a
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>
Configuración de compilación
El bloqueo de apps requiere permisos con privilegios del sistema. Las plataformas que admiten el bloqueo de apps también deben declarar la función del sistema com.android.car.sensitive_app_lock.
Agrega la declaración de funciones y los permisos a 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>
El bloqueo de apps se debe importar como una app del sistema firmada en el archivo 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,
}
Dado que el modo de usuario del sistema sin interfaz gráfica (HSUM) y los usuarios invitados no admiten el bloqueo de apps, debes habilitar el bloqueo de apps solo en perfiles secundarios. Usa esta configuración para habilitar la app para usuarios secundarios.
Por ejemplo, en tu 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>