1 page.title=Inicializao direta 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="tb-wrapper"> 9 <div id="tb"> 10 <h2>Neste documento</h2> 11 <ol> 12 <li><a href="#run">Solicitar acesso para executar durante a inicializao direta</a></li> 13 <li><a href="#access">Acesso ao armazenamento criptografado do dispositivo</a></li> 14 <li><a href="#notification">Receber notificao quando o usurio desbloquear</a></li> 15 <li><a href="#migrating">Migrar dados existentes</a></li> 16 <li><a href="#testing">Testar seu aplicativo com reconhecimento de criptografia</a></li> 17 </ol> 18 </div> 19 </div> 20 21 <p>O Android N executado em um modo seguro de <i>inicializao direta</i> 22 quando o dispositivo ligado, mas o usurio no o 23 desbloqueia. Para isso, o sistema oferece dois locais de armazenamento para dados:</p> 24 25 <ul> 26 <li><i>O armazenamento criptografado de credenciais</i>, que o local de armazenamento padro 27 e disponibilizado apenas depois que o usurio desbloqueia o dispositivo.</li> 28 <li><i>O armazenamento criptografado do dispositivo</i>, que um local de armazenamento disponibilizado 29 durante o modo de inicializao direta e depois que o usurio desbloqueia o dispositivo.</li> 30 </ul> 31 32 <p>Por padro, aplicativos no so executados no modo de inicializao direta. 33 Se seu aplicativo precisa executar aes durante esse modo, voc pode registrar os 34 componentes que devem ser executados. Alguns casos comuns 35 para aplicativos que precisam ser executados no modo de inicializao direta:</p> 36 37 <ul> 38 <li>Aplicativos com notificaes programadas, como aplicativos de 39 despertador.</li> 40 <li>Aplicativos que fornecem notificaes importantes ao usurio, como aplicativos de SMS.</li> 41 <li>Aplicativos que fornecem servios de acessibilidade, como o Talkback.</li> 42 </ul> 43 44 <p>Se seu aplicativo precisar acessar dados enquanto estiver no modo de inicializao direta, use 45 o armazenamento criptografado do dispositivo. O armazenamento criptografado do dispositivo contm dados 46 criptografados com uma chave que s disponibilizada depois que o dispositivo realizou 47 uma inicializao verificada com sucesso.</p> 48 49 <p>Para dados que devem ser criptografados com uma chave associada s credenciais 50 do usurio, como um PIN ou uma senha, use o armazenamento criptografado de credenciais. 51 Esse armazenamento s disponibilizado depois que o usurio 52 desbloquear o dispositivo com sucesso e at que ele reinicie o dispositivo novamente. Se o 53 usurio ativar a tela de bloqueio aps desbloquear o dispositivo, isso no bloquear 54 o armazenamento criptografado de credenciais.</p> 55 56 <h2 id="run">Solicitar acesso para executar durante a inicializao direta</h2> 57 58 <p>Aplicativos devem registrar seus componentes com o sistema antes de 59 poderem ser executados no modo de inicializao direta ou acessar o armazenamento criptografado 60 do dispositivo. Os aplicativos so registrados com o sistema ao marcar os componentes como 61 <i>tendo reconhecimento de criptografia</i>. Para marcar seu componente como tendo reconhecimento de criptografia, defina o atributo 62 <code>android:directBootAware</code> como true no manifesto.<p> 63 64 <p>Componentes com reconhecimento de criptografia podem se registrar para receber uma mensagem de transmisso 65 <code>LOCKED_BOOT_COMPLETED</code> do 66 sistema quando o dispositivo reiniciado. Nesse momento, o armazenamento criptografado do 67 dispositivo disponibilizado e pode executar tarefas 68 necessrias durante o modo de inicializao, como o acionamento de um alarme programado.</p> 69 70 <p>O snippet de cdigo a seguir um exemplo de como registrar um 71 {@link android.content.BroadcastReceiver} como tendo reconhecimento de criptografia e adicionar um 72 filtro de inteno para <code>LOCKED_BOOT_COMPLETED</code> no manifesto do aplicativo:</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>Quando o usurio desbloquear o dispositivo, todos os componentes podero acessar o armazenamento 85 criptografado do dispositivo e o armazenamento criptografado de credenciais.</p> 86 87 <h2 id="access">Acesso ao armazenamento criptografado do dispositivo</h2> 88 89 <p>Para acessar o armazenamento criptografado do dispositivo, crie uma segunda instncia de 90 {@link android.content.Context} chamando 91 <code>Context.createDeviceProtectedStorageContext()</code>. Todas as chamadas da API 92 de armazenamento que usam esse contexto acessam o armazenamento criptografado do dispositivo. O 93 exemplo a seguir acessa o armazenamento criptografado do dispositivo e abre um 94 arquivo de dados existente do aplicativo:</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>Use o armazenamento criptografado do dispositivo somente para 104 informaes que precisem ser acessadas durante o modo de inicializao direta. 105 No use o armazenamento criptografado do dispositivo como um repositrio criptografado para fins gerais. 106 Para informaes particulares do usurio ou dados criptografados que no so necessrios durante 107 o modo de inicializao direta, use o armazenamento criptografado de credenciais.</p> 108 109 <h2 id="notification">Receber notificao quando o usurio desbloquear</h2> 110 111 <p>Quando o usurio desbloquear o dispositivo aps a reinicializao, seu aplicativo poder voltar 112 a acessar o armazenamento criptografado de credenciais e usar servios regulares do sistema que 113 dependem das credenciais do usurio.</p> 114 115 <p>Para receber uma notificao quando o usurio desbloquear o dispositivo aps uma reinicializao, 116 registre um {@link android.content.BroadcastReceiver} do componente em execuo 117 para ouvir a mensagem <code>ACTION_USER_UNLOCKED</code>. Voc tambm pode 118 receber a mensagem {@link android.content.Intent#ACTION_BOOT_COMPLETED 119 ACTION_BOOT_COMPLETED} existente, que agora indica que o dispositivo foi inicializado e que 120 o usurio o desbloqueou.</p> 121 122 <p>Voc pode enviar uma consulta diretamente se o usurio desbloquear o dispositivo chamando 123 <code>UserManager.isUserUnlocked()</code>.</p> 124 125 <h2 id="migrating">Migrar dados existentes</h2> 126 127 <p>Se um usurio atualizar o dispositivo para usar o modo de inicializao direta, voc poder ter dados 128 existentes que precisem ser migrados para o armazenamento criptografado do dispositivo. Use 129 <code>Context.moveSharedPreferencesFrom()</code> e 130 <code>Context.moveDatabaseFrom()</code> para migrar dados de preferncias e do banco de 131 dados entre o armazenamento criptografado de credenciais e o armazenamento criptografado do dispositivo.</p> 132 133 <p>Tenha bom senso ao decidir quais dados migrar do armazenamento 134 criptografado de credenciais para o armazenamento criptografado do dispositivo. No migre 135 informaes particulares do usurio, como senhas ou tokens de autorizao, para o 136 armazenamento criptografado do dispositivo. Em alguns casos, pode ser necessrio gerenciar 137 conjuntos separados de dados nos dois repositrios criptografados.</p> 138 139 <h2 id="testing">Testar seu aplicativo com reconhecimento de criptografia</h2> 140 141 <p>Teste seu aplicativo com reconhecimento de criptografia usando o novo modo de inicializao direta. Existem duas 142 maneiras de ativar a inicializao direta.</p> 143 144 <p class="caution"><strong>Cuidado:</strong> ao ativar a inicializao direta, 145 voc apaga todos os dados do usurio no dispositivo.</p> 146 147 <p>Em dispositivos compatveis com o Android N instalado, ative a 148 inicializao direta seguindo um destes procedimentos:</p> 149 150 <ul> 151 <li>No dispositivo, ative <b>Developer options</b>, se ainda no tiver feito isso, 152 acessando <b>Settings > About phone</b> e tocando em <b>Build number</b> 153 sete vezes. Quando a tela de opes do desenvolvedor for disponibilizada, acesse 154 <b>Settings > Developer options</b> e selecione 155 <b>Convert to file encryption</b>.</li> 156 <li>Use os seguintes comandos de shell adb para ativar o modo de inicializao direta: 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>Um modo de inicializao direta emulado tambm est disponvel, caso voc precise trocar 165 de modo nos dispositivos de teste. O modo emulado s deve ser usado durante 166 o desenvolvimento e pode causar perda de dados. Para ativar o modo de inicializao direta, 167 defina um padro de bloqueio no dispositivo, escolha "No thanks", caso seja solicitada 168 uma tela de inicializao segura ao definir esse padro, e, em seguida, use o 169 seguinte comando de shell adb:</p> 170 171 <pre class="no-pretty-print"> 172 $ adb shell sm set-emulate-fbe true 173 </pre> 174 175 <p>Para desativar o modo de inicializao direta emulado, use o seguinte comando:</p> 176 177 <pre class="no-pretty-print"> 178 $ adb shell sm set-emulate-fbe false 179 </pre> 180 181 <p>O uso desses comandos faz com que o dispositivo seja reinicializado.</p> 182