Home | History | Annotate | Download | only in features
      1 page.title=Inicio directo
      2 page.keywords=preview,sdk,direct boot
      3 page.tags=androidn
      4 page.image=images/cards/card-nyc_2x.jpg
      5 
      6 @jd:body
      7 
      8 <div id="qv-wrapper">
      9 <div id="qv">
     10   <h2>En este documento</h2>
     11   <ol>
     12     <li><a href="#run">Solicitar acceso para ejecutar durante el inicio directo</a></li>
     13     <li><a href="#access">Acceder al almacenamiento encriptado por dispositivo</a></li>
     14     <li><a href="#notification">Recibir notificaciones sobre el desbloqueo del usuario</a></li>
     15     <li><a href="#migrating">Migrar datos existentes</a></li>
     16     <li><a href="#testing">Probar la aplicacin con reconocimiento de encriptacin</a></li>
     17   </ol>
     18 </div>
     19 </div>
     20 
     21 <p>Android N se ejecuta en un modo <i>de inicio directo</i> seguro
     22 cuando el dispositivo se enciende pero el usuario no lo ha
     23 desbloqueado. Para permitir esto, el sistema brinda dos ubicaciones de almacenamiento para los datos:</p>
     24 
     25 <ul>
     26 <li><i>Almacenamiento encriptado por credencial: </i>es la ubicacin de almacenamiento predeterminada
     27 y solo est disponible despus de que el usuario desbloquea el dispositivo.</li>
     28 <li><i>Almacenamiento encriptado por dispositivo: </i>es una ubicacin de almacenamiento que est disponible tanto
     29 durante el modo de inicio directo como despus de que el usuario desbloquea el dispositivo.</li>
     30 </ul>
     31 
     32 <p>De forma predeterminada, las aplicaciones no se ejecutan durante el modo de inicio directo.
     33 Si necesitas que tu aplicacin se ejecute durante el modo de inicio directo, puedes registrar
     34 los componentes de la aplicacin que deberan ejecutarse durante este modo. Algunos casos comunes de
     35 aplicaciones que necesitan ejecutarse durante el modo de inicio directo incluyen los siguientes:</p>
     36 
     37 <ul>
     38 <li>aplicaciones que tienen notificaciones programadas, como aplicaciones
     39 de alarma;</li>
     40 <li>aplicaciones que generan notificaciones de usuario importantes, como aplicaciones de mensajes SMS;</li>
     41 <li>aplicaciones que brindan servicios de accesibilidad, como Talkback.</li>
     42 </ul>
     43 
     44 <p>Si necesitas que tu aplicacin acceda a datos mientras se ejecuta el modo de inicio directo, usa
     45 el almacenamiento encriptado por dispositivo. Este tipo de almacenamiento contiene datos
     46 encriptados con una clave que solo est disponible luego de que el dispositivo haya realizado un inicio
     47 verificado correctamente.</p>
     48 
     49 <p>Para los datos que se deben cifrar con una clave asociada con credenciales del
     50 usuario, como un PIN o una contrasea, usa el almacenamiento encriptado por credencial.
     51 Este tipo de almacenamiento solo est disponible luego de que el usuario haya desbloqueado
     52 correctamente el dispositivo y hasta que el usuario reinicie nuevamente el dispositivo. Si el
     53 usuario habilita el bloqueo de pantalla luego de desbloquear el dispositivo, esto no bloquea
     54 el almacenamiento encriptado por credencial.</p>
     55 
     56 <h2 id="run">Solicitar acceso para ejecutar durante el inicio directo</h2>
     57 
     58 <p>Debes registrar los componentes de las aplicaciones con el sistema antes de que estas puedan
     59 ejecutarse durante el modo de inicio directo o acceder al almacenamiento encriptado por
     60 dispositivo. Para registrar una aplicacin en el sistema, debes marcar los componentes como
     61 <i>"con reconocimiento de encriptacin"</i>. Para marcar tu dispositivo como "con reconocimiento de encriptacin", configura el atributo 
     62 <code>android:directBootAware</code> como verdadero en el manifiesto.<p>
     63 
     64 <p>Los componentes con reconocimiento de encriptacin pueden registrarse para recibir un mensaje de transmisin
     65 <code>LOCKED_BOOT_COMPLETED</code> del
     66  sistema cuando el dispositivo se haya reiniciado. En este momento, el almacenamiento
     67 encriptado por dispositivo est disponible, y el componente puede ejecutar tareas que se deben
     68 ejecutar durante el modo de inicio directo, como disparar una alarma programada.</p>
     69 
     70 <p>El siguiente fragmento de cdigo es un ejemplo de cmo registrar un
     71 {@link android.content.BroadcastReceiver} como reconocimiento de encriptacin y de cmo agregar un
     72 filtro de intents para <code>LOCKED_BOOT_COMPLETED</code> en el manifiesto de la aplicacin:</p>
     73 
     74 <pre>
     75 &lt;receiver
     76   android:directBootAware="true" &gt;
     77   ...
     78   &lt;intent-filter&gt;
     79     &lt;action android:name="android.intent.action.LOCKED_BOOT_COMPLETED" /&gt;
     80   &lt;/intent-filter&gt;
     81 &lt;/receiver&gt;
     82 </pre>
     83 
     84 <p>Una vez que el usuario haya desbloqueado el dispositivo, todos los componentes podrn acceder tanto al
     85 almacenamiento encriptado por dispositivo como al almacenamiento cifrado por credencial.</p>
     86 
     87 <h2 id="access">Acceder al almacenamiento encriptado por dispositivo</h2>
     88 
     89 <p>Para acceder al almacenamiento encriptado por dispositivo, crea una segunda
     90 instancia de {@link android.content.Context} llamando a
     91 <code>Context.createDeviceProtectedStorageContext()</code>. Todas las llamadas
     92 de API de almacenamiento que se hacen usando este contexto acceden al almacenamiento encriptado por dispositivo. El siguiente
     93 ejemplo accede al almacenamiento encriptado por dispositivo y abre un archivo de datos de la aplicacin
     94 existente:</p>
     95 
     96 <pre>
     97 Context directBootContext = appContext.createDeviceProtectedStorageContext();
     98 // Access appDataFilename that lives in device encrypted storage
     99 FileInputStream inStream = directBootContext.openFileInput(appDataFilename);
    100 // Use inStream to read content...
    101 </pre>
    102 
    103 <p>Solo debes usar el almacenamiento encriptado por dispositivo para
    104 informacin que debe ser accesible durante el modo de inicio directo.
    105 No uses este tipo de almacenamiento como un almacenamiento encriptado de propsito general.
    106 Para informacin privada del usuario o datos encriptados que no son necesarios durante
    107 el modo de inicio directo, usa el almacenamiento encriptado por credencial.</p>
    108 
    109 <h2 id="notification">Recibir notificaciones sobre el desbloqueo del usuario</h2>
    110 
    111 <p>Una vez que el usuario desbloquea el dispositivo despus de reiniciarlo, la aplicacin puede cambiar y acceder
    112 al almacenamiento encriptado por credencial y usar servicios del sistema comunes que
    113 dependen de credenciales de usuario.</p>
    114 
    115 <p>Para recibir una notificacin cuando el usuario desbloquea el dispositivo luego de reiniciarlo,
    116 registra un {@link android.content.BroadcastReceiver} de un componente en ejecucin
    117 para que escuche el mensaje <code>ACTION_USER_UNLOCKED</code>. O puedes
    118 recibir el mensaje existente {@link android.content.Intent#ACTION_BOOT_COMPLETED
    119 ACTION_BOOT_COMPLETED}, que ahora indica que el dispositivo se ha iniciado y
    120 que el usuario ha desbloqueado el dispositivo.</p>
    121 
    122 <p>Puedes consultar directamente si el usuario ha desbloqueado el dispositivo llamando a
    123 <code>UserManager.isUserUnlocked()</code>.</p>
    124 
    125 <h2 id="migrating">Migrar datos existentes</h2>
    126 
    127 <p>Si un usuario actualiza el dispositivo para usar el modo de inicio directo, es posible que haya
    128 datos existentes que se deban migrar al almacenamiento encriptado por dispositivo. Usa
    129 <code>Context.moveSharedPreferencesFrom()</code> y
    130 <code>Context.moveDatabaseFrom()</code> para migrar los datos de preferencia y de base de datos
    131 del almacenamiento encriptado por credencial al almacenamiento encriptado por dispositivo.</p>
    132 
    133 <p>Debes tener cuidado cuando decidas qu datos migrar entre
    134 estos dos tipos de almacenamiento. No deberas migrar
    135 informacin de usuario privada, como contraseas o tokens de autorizacin, al
    136  almacenamiento encriptado por dispositivo. En algunos casos, es posible que debas gestionar
    137 conjuntos separados de datos en ambos tipos de almacenamiento encriptado.</p>
    138 
    139 <h2 id="testing">Probar la aplicacin con reconocimiento de encriptacin</h2>
    140 
    141 <p>Prueba la aplicacin con reconocimiento de encriptacin usando el nuevo modo de inicio directo. Hay dos
    142 maneras de habilitar el inicio directo.</p>
    143 
    144 <p class="caution"><strong>Advertencia:</strong> Habilitar el inicio directo
    145 borrar todos los datos de usuario del dispositivo.</p>
    146 
    147 <p>Para los dispositivos compatibles que tienen Android N instalado, habilita
    148 el inicio directo mediante una de las siguientes opciones:</p>
    149 
    150 <ul>
    151 <li>En el dispositivo, habilita las <b>Developer options</b> si no lo haz hecho an
    152 yendo a <b>Settings &gt; About phone</b> y presionando <b>Build number</b>
    153 siete veces. Una vez que aparezca la pantalla Developer options, dirgete a
    154 <b>Settings &gt; Developer options</b> y selecciona
    155 <b>Convert to file encryption</b>.</li>
    156 <li>Usa los siguientes comandos shell ADB para habilitar el modo de inicio directo:
    157 <pre class="no-pretty-print">
    158 $ adb reboot-bootloader
    159 $ fastboot --wipe-and-use-fbe
    160 </pre>
    161 </li>
    162 </ul>
    163 
    164 <p>Tambin est disponible un modo de inicio directo emulado en caso de que debas cambiar
    165 de modo en los dispositivos de prueba. El modo emulado solo debera usarse durante
    166 el desarrollo, y puede provocar la prdida de datos. Para habilitar el modo de inicio directo emulado,
    167 debes establecer un patrn de bloqueo en el dispositivo, elegir "No thanks" si te pregunta si deseas un
    168 inicio seguro cuando ests estableciendo el patrn de bloqueo y, luego, usar el
    169 siguiente comando shell ADB:</p>
    170 
    171 <pre class="no-pretty-print">
    172 $ adb shell sm set-emulate-fbe true
    173 </pre>
    174 
    175 <p>Para deshabilitar el modo de inicio directo emulado, usa el siguiente comando:</p>
    176 
    177 <pre class="no-pretty-print">
    178 $ adb shell sm set-emulate-fbe false
    179 </pre>
    180 
    181 <p>Usar estos comandos provoca el reinicio del dispositivo.</p>
    182