page.title=Inicio directo page.keywords=preview,sdk,direct boot page.tags=androidn page.image=images/cards/card-nyc_2x.jpg @jd:body

En este documento

  1. Solicitar acceso para ejecutar durante el inicio directo
  2. Acceder al almacenamiento encriptado por dispositivo
  3. Recibir notificaciones sobre el desbloqueo del usuario
  4. Migrar datos existentes
  5. Probar la aplicación con reconocimiento de encriptación

Android N se ejecuta en un modo de inicio directo seguro cuando el dispositivo se enciende pero el usuario no lo ha desbloqueado. Para permitir esto, el sistema brinda dos ubicaciones de almacenamiento para los datos:

De forma predeterminada, las aplicaciones no se ejecutan durante el modo de inicio directo. Si necesitas que tu aplicación se ejecute durante el modo de inicio directo, puedes registrar los componentes de la aplicación que deberían ejecutarse durante este modo. Algunos casos comunes de aplicaciones que necesitan ejecutarse durante el modo de inicio directo incluyen los siguientes:

Si necesitas que tu aplicación acceda a datos mientras se ejecuta el modo de inicio directo, usa el almacenamiento encriptado por dispositivo. Este tipo de almacenamiento contiene datos encriptados con una clave que solo está disponible luego de que el dispositivo haya realizado un inicio verificado correctamente.

Para los datos que se deben cifrar con una clave asociada con credenciales del usuario, como un PIN o una contraseña, usa el almacenamiento encriptado por credencial. Este tipo de almacenamiento solo está disponible luego de que el usuario haya desbloqueado correctamente el dispositivo y hasta que el usuario reinicie nuevamente el dispositivo. Si el usuario habilita el bloqueo de pantalla luego de desbloquear el dispositivo, esto no bloquea el almacenamiento encriptado por credencial.

Solicitar acceso para ejecutar durante el inicio directo

Debes registrar los componentes de las aplicaciones con el sistema antes de que estas puedan ejecutarse durante el modo de inicio directo o acceder al almacenamiento encriptado por dispositivo. Para registrar una aplicación en el sistema, debes marcar los componentes como "con reconocimiento de encriptación". Para marcar tu dispositivo como "con reconocimiento de encriptación", configura el atributo android:directBootAware como verdadero en el manifiesto.

Los componentes con reconocimiento de encriptación pueden registrarse para recibir un mensaje de transmisión LOCKED_BOOT_COMPLETED del sistema cuando el dispositivo se haya reiniciado. En este momento, el almacenamiento encriptado por dispositivo está disponible, y el componente puede ejecutar tareas que se deben ejecutar durante el modo de inicio directo, como disparar una alarma programada.

El siguiente fragmento de código es un ejemplo de cómo registrar un {@link android.content.BroadcastReceiver} como reconocimiento de encriptación y de cómo agregar un filtro de intents para LOCKED_BOOT_COMPLETED en el manifiesto de la aplicación:

<receiver
  android:directBootAware="true" >
  ...
  <intent-filter>
    <action android:name="android.intent.action.LOCKED_BOOT_COMPLETED" />
  </intent-filter>
</receiver>

Una vez que el usuario haya desbloqueado el dispositivo, todos los componentes podrán acceder tanto al almacenamiento encriptado por dispositivo como al almacenamiento cifrado por credencial.

Acceder al almacenamiento encriptado por dispositivo

Para acceder al almacenamiento encriptado por dispositivo, crea una segunda instancia de {@link android.content.Context} llamando a Context.createDeviceProtectedStorageContext(). Todas las llamadas de API de almacenamiento que se hacen usando este contexto acceden al almacenamiento encriptado por dispositivo. El siguiente ejemplo accede al almacenamiento encriptado por dispositivo y abre un archivo de datos de la aplicación existente:

Context directBootContext = appContext.createDeviceProtectedStorageContext();
// Access appDataFilename that lives in device encrypted storage
FileInputStream inStream = directBootContext.openFileInput(appDataFilename);
// Use inStream to read content...

Solo debes usar el almacenamiento encriptado por dispositivo para información que debe ser accesible durante el modo de inicio directo. No uses este tipo de almacenamiento como un almacenamiento encriptado de propósito general. Para información privada del usuario o datos encriptados que no son necesarios durante el modo de inicio directo, usa el almacenamiento encriptado por credencial.

Recibir notificaciones sobre el desbloqueo del usuario

Una vez que el usuario desbloquea el dispositivo después de reiniciarlo, la aplicación puede cambiar y acceder al almacenamiento encriptado por credencial y usar servicios del sistema comunes que dependen de credenciales de usuario.

Para recibir una notificación cuando el usuario desbloquea el dispositivo luego de reiniciarlo, registra un {@link android.content.BroadcastReceiver} de un componente en ejecución para que escuche el mensaje ACTION_USER_UNLOCKED. O puedes recibir el mensaje existente {@link android.content.Intent#ACTION_BOOT_COMPLETED ACTION_BOOT_COMPLETED}, que ahora indica que el dispositivo se ha iniciado y que el usuario ha desbloqueado el dispositivo.

Puedes consultar directamente si el usuario ha desbloqueado el dispositivo llamando a UserManager.isUserUnlocked().

Migrar datos existentes

Si un usuario actualiza el dispositivo para usar el modo de inicio directo, es posible que haya datos existentes que se deban migrar al almacenamiento encriptado por dispositivo. Usa Context.moveSharedPreferencesFrom() y Context.moveDatabaseFrom() para migrar los datos de preferencia y de base de datos del almacenamiento encriptado por credencial al almacenamiento encriptado por dispositivo.

Debes tener cuidado cuando decidas qué datos migrar entre estos dos tipos de almacenamiento. No deberías migrar información de usuario privada, como contraseñas o tokens de autorización, al almacenamiento encriptado por dispositivo. En algunos casos, es posible que debas gestionar conjuntos separados de datos en ambos tipos de almacenamiento encriptado.

Probar la aplicación con reconocimiento de encriptación

Prueba la aplicación con reconocimiento de encriptación usando el nuevo modo de inicio directo. Hay dos maneras de habilitar el inicio directo.

Advertencia: Habilitar el inicio directo borrará todos los datos de usuario del dispositivo.

Para los dispositivos compatibles que tienen Android N instalado, habilita el inicio directo mediante una de las siguientes opciones:

También está disponible un modo de inicio directo emulado en caso de que debas cambiar de modo en los dispositivos de prueba. El modo emulado solo debería usarse durante el desarrollo, y puede provocar la pérdida de datos. Para habilitar el modo de inicio directo emulado, debes establecer un patrón de bloqueo en el dispositivo, elegir "No thanks" si te pregunta si deseas un inicio seguro cuando estás estableciendo el patrón de bloqueo y, luego, usar el siguiente comando shell ADB:

$ adb shell sm set-emulate-fbe true

Para deshabilitar el modo de inicio directo emulado, usa el siguiente comando:

$ adb shell sm set-emulate-fbe false

Usar estos comandos provoca el reinicio del dispositivo.