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 <receiver 76 android:directBootAware="true" > 77 ... 78 <intent-filter> 79 <action android:name="android.intent.action.LOCKED_BOOT_COMPLETED" /> 80 </intent-filter> 81 </receiver> 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 > 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 > 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