• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1page.title=Inicio directo
2page.keywords=preview,sdk,direct boot
3page.tags=androidn
4page.image=images/cards/card-nyc_2x.jpg
5
6@jd:body
7
8<div id="tb-wrapper">
9<div id="tb">
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 aplicación con reconocimiento de encriptación</a></li>
17  </ol>
18</div>
19</div>
20
21<p>Android N se ejecuta en un modo <i>de inicio directo</i> seguro
22cuando el dispositivo se enciende pero el usuario no lo ha
23desbloqueado. 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 ubicación de almacenamiento predeterminada
27y solo está disponible después de que el usuario desbloquea el dispositivo.</li>
28<li><i>Almacenamiento encriptado por dispositivo: </i>es una ubicación de almacenamiento que está disponible tanto
29durante el modo de inicio directo como después 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.
33Si necesitas que tu aplicación se ejecute durante el modo de inicio directo, puedes registrar
34los componentes de la aplicación que deberían ejecutarse durante este modo. Algunos casos comunes de
35aplicaciones 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
39de 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 aplicación acceda a datos mientras se ejecuta el modo de inicio directo, usa
45el almacenamiento encriptado por dispositivo. Este tipo de almacenamiento contiene datos
46encriptados con una clave que solo está disponible luego de que el dispositivo haya realizado un inicio
47verificado correctamente.</p>
48
49<p>Para los datos que se deben cifrar con una clave asociada con credenciales del
50usuario, como un PIN o una contraseña, usa el almacenamiento encriptado por credencial.
51Este tipo de almacenamiento solo está disponible luego de que el usuario haya desbloqueado
52correctamente el dispositivo y hasta que el usuario reinicie nuevamente el dispositivo. Si el
53usuario habilita el bloqueo de pantalla luego de desbloquear el dispositivo, esto no bloquea
54el 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
59ejecutarse durante el modo de inicio directo o acceder al almacenamiento encriptado por
60dispositivo. Para registrar una aplicación en el sistema, debes marcar los componentes como
61<i>"con reconocimiento de encriptación"</i>. Para marcar tu dispositivo como "con reconocimiento de encriptación", configura el atributo
62<code>android:directBootAware</code> como verdadero en el manifiesto.<p>
63
64<p>Los componentes con reconocimiento de encriptación pueden registrarse para recibir un mensaje de transmisión
65<code>LOCKED_BOOT_COMPLETED</code> del
66 sistema cuando el dispositivo se haya reiniciado. En este momento, el almacenamiento
67encriptado por dispositivo está disponible, y el componente puede ejecutar tareas que se deben
68ejecutar durante el modo de inicio directo, como disparar una alarma programada.</p>
69
70<p>El siguiente fragmento de código es un ejemplo de cómo registrar un
71{@link android.content.BroadcastReceiver} como reconocimiento de encriptación y de cómo agregar un
72filtro de intents para <code>LOCKED_BOOT_COMPLETED</code> en el manifiesto de la aplicación:</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 podrán acceder tanto al
85almacenamiento 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
90instancia de {@link android.content.Context} llamando a
91<code>Context.createDeviceProtectedStorageContext()</code>. Todas las llamadas
92de API de almacenamiento que se hacen usando este contexto acceden al almacenamiento encriptado por dispositivo. El siguiente
93ejemplo accede al almacenamiento encriptado por dispositivo y abre un archivo de datos de la aplicación
94existente:</p>
95
96<pre>
97Context directBootContext = appContext.createDeviceProtectedStorageContext();
98// Access appDataFilename that lives in device encrypted storage
99FileInputStream inStream = directBootContext.openFileInput(appDataFilename);
100// Use inStream to read content...
101</pre>
102
103<p>Solo debes usar el almacenamiento encriptado por dispositivo para
104información que debe ser accesible durante el modo de inicio directo.
105No uses este tipo de almacenamiento como un almacenamiento encriptado de propósito general.
106Para información privada del usuario o datos encriptados que no son necesarios durante
107el 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 después de reiniciarlo, la aplicación puede cambiar y acceder
112al almacenamiento encriptado por credencial y usar servicios del sistema comunes que
113dependen de credenciales de usuario.</p>
114
115<p>Para recibir una notificación cuando el usuario desbloquea el dispositivo luego de reiniciarlo,
116registra un {@link android.content.BroadcastReceiver} de un componente en ejecución
117para que escuche el mensaje <code>ACTION_USER_UNLOCKED</code>. O puedes
118recibir el mensaje existente {@link android.content.Intent#ACTION_BOOT_COMPLETED
119ACTION_BOOT_COMPLETED}, que ahora indica que el dispositivo se ha iniciado y
120que 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
128datos 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
131del almacenamiento encriptado por credencial al almacenamiento encriptado por dispositivo.</p>
132
133<p>Debes tener cuidado cuando decidas qué datos migrar entre
134estos dos tipos de almacenamiento. No deberías migrar
135información de usuario privada, como contraseñas o tokens de autorización, al
136 almacenamiento encriptado por dispositivo. En algunos casos, es posible que debas gestionar
137conjuntos separados de datos en ambos tipos de almacenamiento encriptado.</p>
138
139<h2 id="testing">Probar la aplicación con reconocimiento de encriptación</h2>
140
141<p>Prueba la aplicación con reconocimiento de encriptación usando el nuevo modo de inicio directo. Hay dos
142maneras de habilitar el inicio directo.</p>
143
144<p class="caution"><strong>Advertencia:</strong> Habilitar el inicio directo
145borrará todos los datos de usuario del dispositivo.</p>
146
147<p>Para los dispositivos compatibles que tienen Android N instalado, habilita
148el 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 aún
152yendo a <b>Settings &gt; About phone</b> y presionando <b>Build number</b>
153siete veces. Una vez que aparezca la pantalla Developer options, dirígete 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>También está disponible un modo de inicio directo emulado en caso de que debas cambiar
165de modo en los dispositivos de prueba. El modo emulado solo debería usarse durante
166el desarrollo, y puede provocar la pérdida de datos. Para habilitar el modo de inicio directo emulado,
167debes establecer un patrón de bloqueo en el dispositivo, elegir "No thanks" si te pregunta si deseas un
168inicio seguro cuando estás estableciendo el patrón de bloqueo y, luego, usar el
169siguiente 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