1page.title=Android N for Developers 2meta.tags="preview", "androidn" 3page.tags="preview", "developer preview" 4page.image=images/cards/card-n-apis_2x.png 5@jd:body 6 7 8 9 10<div id="tb-wrapper"> 11<div id="tb"> 12 <h2>Principais recursos para desenvolvedores</h2> 13 <ol> 14 <ul style="list-style-type:none;"> 15 <li><a href="#multi-window_support">Suporte a várias janelas</a></li> 16 <li><a href="#notification_enhancements">Notificações</a></li> 17 <li><a href="#jit_aot">Compilação JIT/AOT</a></li> 18 <li><a href="#quick_path_to_app_install">Caminho rápido para a instalação de aplicativos</a></li> 19 <li><a href="#doze_on_the_go">Modo soneca em movimento</a></li> 20 <li><a href="#background_optimizations">Otimizações em segundo plano</a></li> 21 <li><a href="#data_saver">Economia de dados</a></li> 22 <li><a href="#vulkan">Vulkan API</a></li> 23 <li><a href="#tile_api">Quick Settings Tile API</a></li> 24 <li><a href="#number-blocking">Bloqueio de número</a></li> 25 <li><a href="#call_screening">Triagem de chamadas</a></li> 26 <li><a href="#multi-locale_languages">Localidades e idiomas</a></li> 27 <li><a href="#emoji">Novos emoticons</a></li> 28 <li><a href="#icu4">ICU4J APIs no Android</a></li> 29 <li><a href="#gles_32">OpenGL ES 3.2 API</a></li> 30 <li><a href="#android_tv_recording">Gravação do Android TV</a></li> 31 <li><a href="#android_for_work">Android for Work</a></li> 32 <li><a href="#accessibility_enhancements">Acessibilidade</a></li> 33 <li><a href="#direct_boot">Inicialização direta</a></li> 34 <li><a href="#key_attestation">Confirmação de chaves</a></li> 35 <li><a href="#network_security_config">Configuração de segurança de rede</a></li> 36 <li><a href="#default_trusted_ca">CA confiável padrão</a></li> 37 <li><a href="#apk_signature_v2">Esquema de assinatura de APK v2</a></li> 38 <li><a href="#scoped_directory_access">Acesso a diretórios com escopo</a></li> 39 <li><a href="#keyboard_shortcuts_helper">Auxiliar de atalhos de teclado</a></li> 40 <li><a href="#sustained_performance_api">API de desempenho sustentado</a></li> 41 <li><a href="#vr">Suporte a RV</a></li> 42 <li><a href="#print_svc">Melhorias nos serviços de impressão</a></li> 43 <li><a href="#virtual_files">Arquivos virtuais</a></li> 44 <li><a href="#framemetrics_api">FrameMetricsListener API</a></li> 45 </ol> 46</div> 47</div> 48 49 50 51<p>O Android N ainda está em desenvolvimento ativo, mas agora você já pode testá-lo 52como parte do N Developer Preview. As seções a seguir destacam alguns dos 53novos recursos para desenvolvedores. </p> 54 55<p> 56 Não deixe de conferir as <a href="{@docRoot}preview/behavior-changes.html">Mudanças de comportamento</a> para saber mais sobre as 57 áreas onde as alterações de plataforma podem afetar os aplicativos, examine os 58 guias para desenvolvedores para saber mais sobre os principais recursos e faça o download da <a href="{@docRoot}preview/setup-sdk.html#docs-dl">Referência da API</a> para obter detalhes sobre as 59 novas APIs. 60</p> 61 62<h2 id="multi-window_support">Suporte a várias janelas</h2> 63 64 65<p>No Android N, introduzimos um recurso de multitarefa novo e muito solicitado 66na plataforma — o suporte a várias janelas. </p> 67 68 <p>Agora os usuários podem abrir dois aplicativos na tela ao mesmo tempo. </p> 69 <ul> 70 <li>Em celulares e tablets 71executando o Android N, os usuários agora podem executar dois aplicativos lado a lado ou 72um acima do outro em modo de tela dividida. Os usuários podem redimensionar os aplicativos arrastando 73o divisor entre eles. </li> 74 75<li>Em dispositivos Android TV, os aplicativos podem assumir o <a href="{@docRoot}preview/features/picture-in-picture.html">modo imagem em 76imagem</a>, o que permite que continuem a exibir conteúdo enquanto o usuário navega ou 77interage com outros aplicativos.</li> 78 </ul> 79 80<div class="col-4of10"> 81<img src="{@docRoot}images/android-7.0/mw-portrait.png" alt="" style="height:460px;padding-left:1em;" id="img-split-screen" /> 82<p class="img-caption"> 83 <strong>Figura 1.</strong> Aplicativos executando em modo de tela dividida. 84</p> 85 86 </div> 87 88<p>O suporte a várias janelas oferece novas formas de envolver os usuários, 89particularmente em tablets e outros dispositivos com telas maiores. Você pode até ativar o recurso de arrastar e soltar 90no aplicativo para permitir que os usuários arrastem conteúdo de ou para o aplicativo — uma ótima 91maneira de aprimorar a experiência do usuário. </p> 92 93<p>É muito fácil adicionar suporte a várias janelas a seu aplicativo e configurar como ele 94lida com exibição em várias janelas. Por exemplo, você pode especificar as dimensões 95mínimas permitidas para sua atividade, evitando que os usuários redimensionem a atividade para abaixo 96deste tamanho. Você também pode desativar a exibição de várias janelas para o aplicativo, o que 97 garante que o sistema só mostrará o aplicativo em modo de tela inteira.</p> 98 99<p> 100 Para obter mais informações, consulte a documentação para desenvolvedores de <a href="{@docRoot}preview/features/multi-window.html">Suporte a várias janelas</a> 101. 102</p> 103 104<h2 id="notification_enhancements">Aprimoramentos de notificações</h2> 105 106<p>Reformulamos as notificações no Android N para facilitar e agilizar o 107uso. Entre as alterações estão:</p> 108 109<ul> 110 <li> 111 <strong>Atualizações de modelos</strong>: Estamos atualizando os modelos de notificação para 112 colocar mais ênfase na imagem do herói e do avatar. Os desenvolvedores poderão 113 aproveitar os novos modelos com ajustes mínimos no código. 114 </li> 115 116 <li> 117 <strong>Personalização de estilo de mensagem</strong>: Você pode personalizar mais 118rótulos de interface de usuário associados às suas notificações usando a classe 119<code>MessageStyle</code>. É possível configurar a mensagem, o título da conversa 120e a visualização de conteúdo. 121 </li> 122 123 <li> 124 <strong>Notificações empacotadas</strong>: O sistema pode agrupar mensagens 125 por tópico de mensagem, por exemplo, e exibir o grupo. Um usuário pode 126 executar ações, como Dismiss ou Archive, nessa exibição de grupo. Se você 127 já implementou notificações para o Android Wear, está familiarizado com 128 esse modelo. 129 </li> 130 131 <li> 132 <strong>Resposta direta</strong>: Para aplicativos de comunicação em tempo real, o 133 sistema Android oferece suporte a respostas em linha para que os usuários possam responder rapidamente a 134 mensagens SMS ou de texto diretamente dentro da interface de notificação. 135 </li> 136 137 <li> 138 <strong>Visualizações personalizadas</strong>: Duas APIs novas permitem utilizar decorações 139 do sistema, como cabeçalhos e ações de notificação, durante o uso de visualizações 140 personalizadas em notificações. 141 </li> 142</ul> 143 144<div class="col-4of12"> 145 <img src="{@docRoot}images/android-7.0/notifications-1.png" alt="" style="padding:.5em;max-width:226px"> 146</div> 147 148<div class="col-4of12"> 149 <img src="{@docRoot}images/android-7.0/notifications-3.png" alt="" style="padding:.5em;max-width:226px"> 150</div> 151 152<div class="col-4of12"> 153 <img src="{@docRoot}images/android-7.0/notifications-2.png" alt="" style="padding:.5em;max-width:226px"> 154</div> 155 156 157<p class="img-caption"> 158 <strong>Figura 2.</strong> Notificações empacotadas e resposta direta. 159</p> 160 161<p>Para saber como implementar os novos recursos, consulte o 162guia <a href="{@docRoot}preview/features/notification-updates.html">Notificações</a> 163.</p> 164 165 166 167<h2 id="jit_aot">Compilação JIT/AOT orientada a perfil</h2> 168 169<p>No Android N, adicionamos um compilador Just in Time (JIT) com perfis de código para 170ART, o que permite aprimorar constantemente o desempenho de aplicativos Android durante a 171execução. O compilador JIT complementa o compilador atual Ahead of Time (AOT) 172 do ART e ajuda a aprimorar o desempenho em tempo de execução, economizar espaço de armazenamento e acelerar atualizações 173 de aplicativos e de sistema.</p> 174 175<p>A compilação orientada a perfil permite que o ART gerencie a compilação AOT/JIT de cada aplicativo 176de acordo com o uso real e com as condições no dispositivo. Por 177exemplo, o ART mantém um perfil dos principais métodos do aplicativo e pode pré-compilar 178e armazenar esses métodos em cache para obter o melhor desempenho. As outras partes do aplicativo não são 179compiladas até que sejam realmente utilizadas.</p> 180 181<p>Além de aprimorar o desempenho para as principais partes do aplicativo, a compilação 182ajuda a reduzir o uso geral de recursos de RAM, incluindo os binários 183associados. Esse recurso é particularmente importante em dispositivos com pouca memória.</p> 184 185<p>O ART gerencia a compilação orientada a perfil de forma a minimizar o impacto sobre a 186bateria do dispositivo. A pré-compilação é executada apenas quando o dispositivo está ocioso e 187com a bateria sendo carregada, economizando tempo e bateria com a execução antecipada dessa tarefa.</p> 188 189<h2 id="quick_path_to_app_install">Caminho rápido para a instalação de aplicativos</h2> 190 191<p>Um dos benefícios mais tangíveis do compilador JIT do ART é a velocidade de instalação dos 192aplicativos e das atualizações do sistema. Até mesmo aplicativos grandes, que exigiam vários minutos para 193otimização e instalação no Android 6.0, podem agora ser instalados em 194segundos. As atualizações de sistema também ficaram mais rápidas, pois não existe mais a etapa de otimização. </p> 195 196<h2 id="doze_on_the_go">Modo soneca em movimento...</h2> 197 198<p>O Android 6.0 introduziu o modo soneca, um modo de sistema que economiza bateria adiando 199atividades de CPU e rede dos aplicativos quando o dispositivo está ocioso, como 200quando está em uma mesa ou gaveta. </p> 201 202<p>Agora, no Android N, o modo soneca foi aprimorado e economiza bateria quando em movimento. 203Sempre que a tela ficar desativada por um período e o dispositivo ficar desativado, 204o modo soneca aplicará um subconjunto das restrições familiares de CPU e rede aos aplicativos. 205Isso significa que os usuários podem economizar bateria transportando os dispositivos no 206bolso.</p> 207 208 209<img src="/preview/images/doze-diagram-1.png" alt="" id="figure1" /> 210<p class="img-caption"> 211 <strong>Figura 3.</strong> O modo soneca agora aplica 212 restrições para aumentar a vida útil da bateria mesmo quando o dispositivo não está estacionário. 213</p> 214 215 216<p>Pouco depois de a tela ser desativada com o dispositivo alimentado pela bateria, o modo soneca 217restringe o acesso de rede e adia trabalhos e sincronizações. Durante breves janelas de 218manutenção, os aplicativos podem acessar a rede e todos os 219trabalhos/sincronizações adiados são executados. A ativação da tela ou do dispositivo 220encerra o modo soneca.</p> 221 222<p>Quando o dispositivo voltar a ficar estacionário, com a tela desativada e alimentado por bateria por um 223período, o modo soneca aplicará as restrições completas de CPU e rede em {@link 224android.os.PowerManager.WakeLock}, alarmes {@link android.app.AlarmManager} e 225verificações de GPS/Wi-Fi.</p> 226 227<p>As práticas recomendadas para adaptar o aplicativo ao modo soneca são as mesmas para 228dispositivos estacionários ou em movimento. Portanto, se você já atualizou o aplicativo para 229processar o modo soneca corretamente, está pronto. Caso contrário, comece a <a href="{@docRoot}training/monitoring-device-state/doze-standby.html#assessing_your_app">adaptar 230 o aplicativo para o modo soneca</a> agora.</p> 231 232<h2 id="background_optimizations">Project Svelte: Otimizações em segundo plano</h2> 233 234<p>O Project Svelte é um esforço contínuo para minimizar o uso de RAM pelo sistema e pelos aplicativos 235nos dispositivos Android existentes no ecossistema. No Android N, o Project 236Svelte se concentra em otimizar a forma de execução dos aplicativos em segundo plano. </p> 237 238<p>O processamento em segundo plano é parte essencial da maioria dos aplicativos. Quando executado corretamente, a experiência 239do usuário pode ficar incrível — imediata, rápida e sensível ao contexto. 240Quando executado incorretamente, o processamento em segundo plano pode consumir desnecessariamente RAM (e 241bateria) e afetar o desempenho do sistema para os outros aplicativos. </p> 242 243<p>Desde o Android 5.0, {@link android.app.job.JobScheduler} é a forma 244preferencial para execução de trabalho em segundo plano de uma maneira que beneficia 245os usuários. Os aplicativos podem agendar trabalhos e permitir que o sistema execute otimizações com base em 246condições de memória, energia e conectividade. O JobScheduler oferece controle e 247simplicidade, e queremos que seja usado por todos os aplicativos. </p> 248 249<p> 250 Outra boa opção é o <a href="https://developers.google.com/android/reference/com/google/android/gms/gcm/GcmNetworkManager"> 251 <code>GCMNetworkManager</code></a>, parte do Google Play Services, que 252 oferece um agendamento de trabalhos similar, compatível com versões legadas do 253 Android. 254</p> 255 256<p>Continuamos a expandir o <code>JobScheduler</code> e o 257<code>GCMNetworkManager</code> para atender a mais 258casos de uso — por exemplo, no Android N, você já pode agendar trabalhos 259em segundo plano de acordo com mudanças nos provedores de conteúdo. Ao mesmo tempo, começamos a 260substituir alguns padrões mais antigos que podem reduzir o desempenho do sistema, 261particularmente em dispositivos com pouca memória.</p> 262 263<p>No Android N, estamos removendo três transmissões implícitas de uso comum — 264{@link android.net.ConnectivityManager#CONNECTIVITY_ACTION}, {@link 265android.hardware.Camera#ACTION_NEW_PICTURE} e {@link 266 android.hardware.Camera#ACTION_NEW_VIDEO} —, pois podem despertar simultaneamente 267processos em segundo plano de vários aplicativos, aumentando o consumo de memória e bateria. Se 268o seu aplicativo receber essas transmissões, aproveite o N Developer Preview para 269 migrar para o <code>JobScheduler</code> e as APIs relacionadas. </p> 270 271<p> 272 Consulte a documentação de <a href="{@docRoot}preview/features/background-optimization.html">Otimizações 273em segundo plano</a> para obter mais detalhes. 274</p> 275 276 277<h2 id="data_saver">Economia de dados</h2> 278 279<div class="col-5of12" style="margin-right:1.5em;"> 280<img src="{@docRoot}images/android-7.0/datasaver.png" style="border:2px solid #ddd"> 281 282<p class="img-caption" style="padding-right:2em;"> 283 <strong>Figura 4.</strong> Economia de dados em Settings. 284</p> 285 </div> 286 287<p>Normalmente, o custo de um plano de dados de celular ao longo da vida útil do dispositivo móvel 288excede o custo do próprio dispositivo. Para muitos usuários, os dados de celular 289são um recurso caro que querem economizar. </p> 290 291<p>O Android N introduz o modo de Economia de dados, um novo serviço do sistema que ajuda a reduzir 292o uso de dados de celular pelos aplicativos em situações de roaming, perto do final do ciclo de cobrança 293ou em pacotes de dados pré-pagos pequenos. A Economia de dados permite que os usuários controlem o 294uso de dados de celular e possibilita que os desenvolvedores ofereçam serviços mais eficientes quando o modo de Economia 295de dados estiver ativado. </p> 296 297<p>Quando um usuário ativa a Economia de dados em <strong>Settings</strong> e o dispositivo está 298em uma rede tarifada, o sistema bloqueia o uso de dados em segundo plano e avisa aos aplicativos 299para reduzir o uso de dados no primeiro plano sempre que possível — como, por exemplo, limitar a 300taxa de bits de streaming, reduzir a qualidade de imagens, adiar o armazenamento prévio otimista em cache 301e assim por diante. Os usuários podem autorizar aplicativos específicos a usar dados tarifados 302em segundo plano, mesmo com a Economia de dados ativada.</p> 303 304<p>O Android N estende o {@link android.net.ConnectivityManager} para oferecer aos aplicativos uma 305forma de <a href="{@docRoot}preview/features/data-saver.html#status">recuperar as 306preferências do usuário para a Economia de dados</a> e <a href="{@docRoot}preview/features/data-saver.html#monitor-changes">monitorar 307as mudanças de preferências</a>. Todos os aplicativos devem verificar se o usuário ativou a Economia 308de dados e tentar limitar o uso de dados em primeiro e segundo plano.</p> 309 310 311<h2 id="vulkan">Vulkan API</h2> 312 313<p> 314 O Android N integra o <a href="http://www.khronos.org/vulkan" class="external-link">Vulkan™</a>, uma nova API de renderização 3D, à plataforma. Como o 315 <a href="https://www.khronos.org/opengles/" class="external-link">OpenGL™ 316 ES</a>, o Vulkan é um padrão aberto para gráficos e renderização 3D mantido 317 pelo Khronos Group. 318</p> 319 320<p> 321 O Vulkan foi projetado desde o início para minimizar sobrecargas na CPU do driver 322 e permitir que seu aplicativo controle a operação de GPU de forma mais direta. O Vulkan 323 também oferece melhor paralelização ao permitir que vários encadeamento realizem 324 trabalhos como a construção de buffer de comando de uma só vez. 325</p> 326 327<p> 328 As ferramentas de desenvolvimento e bibliotecas do Vulkan se combinam ao Android NDK. Elas 329 incluem: 330</p> 331 332<ul> 333 <li>Cabeçalhos 334 </li> 335 336 <li>Camadas de validação (bibliotecas de depuração) 337 </li> 338 339 <li>Compilador de sombreadores SPIR-V 340 </li> 341 342 <li>Biblioteca de compilação de sombreadores SPIR-V em tempo de execução 343 </li> 344</ul> 345 346<p> 347 O Vulkan só está disponível para aplicativos em dispositivos com hardware com capacidade para Vulkan, 348 como Nexus 5X, Nexus 6P e Nexus Player Estamos trabalhando em estreita cooperação com nossos 349 parceiros para oferecer o Vulkan em mais dispositivos assim que possível. 350</p> 351 352<p> 353 Para obter mais informações, consulte a <a href="{@docRoot}ndk/guides/graphics/index.html">documentação da API</a>. 354</p> 355 356<h2 id="tile_api">Quick Settings Tile API</h2> 357 358 359<div style="float:right;max-width:320px"> 360<img src="{@docRoot}images/android-7.0/quicksettings.png" style="padding-left:1.5em;"> 361 362<p class="img-caption" style="padding-left:2em;"> 363 <strong>Figura 5.</strong> Blocos de Configurações rápidas na aba de notificações. 364</p> 365 366 367 </div><p>As Configurações rápidas são uma forma popular e simples de expor as principais configurações e ações 368diretamente na aba de notificações. No Android N, ampliamos o escopo das 369Configurações rápidas para aumentar ainda mais a utilidade e a conveniência. </p> 370 371<p>Adicionamos mais espaço para os blocos de Configurações rápidas, que os usuários podem 372acessar em uma área de exibição paginada deslizando à direita ou à esquerda. Além disso, 373permitimos que os usuários controlem quais blocos de Configurações rápidas são exibidos, bem como o local 374em que são exibidos — para adicionar ou mover blocos, os usuários simplesmente arrastam e soltam os blocos. </p> 375 376<p>Para desenvolvedores, o Android N também adiciona uma API nova que permite definir os próprios 377blocos de Configurações rápidas para que os usuários possam acessar facilmente os principais controles e ações do seu aplicativo.</p> 378 379<p> 380 Os blocos de Configurações rápidas estão reservados para controles ou ações que são 381 urgentemente necessários ou frequentemente usados e não devem ser usados como atalhos para 382 iniciar aplicativos. 383</p> 384 385<p> 386 Após definir os blocos, você pode disponibilizá-los aos usuários, que por sua vez podem adicioná-los 387 às Configurações rápidas usando o recurso de arrastar e soltar. 388</p> 389 390<p> 391 Para obter informações sobre a criação de um bloco de aplicativo, consulte a documentação para 392 <code>android.service.quicksettings.Tile</code> na <a href="{@docRoot}preview/setup-sdk.html#docs-dl">Referência da API</a>, disponível para download. 393</p> 394 395 396 397<h2 id="number-blocking">Bloqueio de número</h2> 398 399<p>O Android N agora oferece suporte a bloqueio de números na plataforma e disponibiliza uma 400API de estrutura para permitir que provedores de serviço mantenham uma lista de números bloqueados. O 401 aplicativo padrão de SMS, o aplicativo padrão de telefone e os aplicativos de provedor podem ler e gravar 402a lista de números bloqueados. A lista não está acessível para outros aplicativos.</p> 403 404<p>Ao oferecer o bloqueio de número como recurso padrão da plataforma, o Android oferece 405uma forma consistente de bloqueio de números em uma grande variedade de 406dispositivos. Alguns benefícios que podem ser aproveitados pelos aplicativos são:</p> 407 408<ul> 409 <li> Números bloqueados para chamadas também são bloqueados para mensagens de texto 410 <li> Números bloqueados podem persistir entre várias redefinições e dispositivos por meio do 411recurso Backup e restauração 412 <li> Vários aplicativos podem usar a mesma lista de números bloqueados 413</ul> 414 415<p>Além disso, a integração de aplicativos da operadora por meio do Android significa que as operadoras podem 416ler a lista de números bloqueados no dispositivo e executar um bloqueio do lado do servidor 417para o usuário, impedindo que chamadas e textos indesejados cheguem a ele 418por qualquer meio, como terminais de VOIP ou encaminhamento de telefones.</p> 419 420<p> 421 Para obter mais informações, consulte <code>android.provider.BlockedNumberContract</code> 422 na <a href="{@docRoot}preview/setup-sdk.html#docs-dl">Referência 423da API</a>, disponível para download. 424</p> 425 426<h2 id="call_screening">Triagem de chamadas</h2> 427 428<p> 429 O Android N permite que o aplicativo de telefone padrão faça a triagem das chamadas recebidas. O aplicativo 430 de telefone faz isso implementando o novo <code>CallScreeningService</code>, 431 que permite a execução de diversas ações com base nos 432 {@link android.telecom.Call.Details Call.Details} da chamada recebida, como: 433</p> 434 435<ul> 436 <li> Rejeitar a chamada recebida 437 <li> Não incluir a chamada no registro de chamadas 438 <li> Não mostrar ao usuário a notificação da chamada 439</ul> 440 441<p> 442 Para obter mais informações, consulte <code>android.telecom.CallScreeningService</code> 443 na <a href="{@docRoot}preview/setup-sdk.html#docs-dl">Referência 444da API</a>, disponível para download. 445</p> 446 447 448<h2 id="multi-locale_languages">Suporte a diversas localidades, mais idiomas</h2> 449 450 451<p>O Android N agora permite que os usuários selecionem <strong>diversas localidades</strong> em Settings 452para oferecer melhor suporte a casos de uso bilíngue. Os aplicativos podem usar 453uma API nova para obter as localidades selecionadas pelo usuário e oferecer 454experiências de usuário mais sofisticadas para usuários com diversas localidades — como, por exemplo, mostrar resultados de pesquisa em 455diversos idiomas e não oferecer a tradução de páginas da web que usam 456um idioma conhecido pelo usuário.</p> 457 458<p>Juntamente com o suporte a várias localidades, o Android N também amplia o número de idiomas 459disponíveis aos usuários. Ele oferece mais de 25 variantes para cada um dos idiomas 460mais comuns, como inglês, espanhol, francês e árabe. Além disso, adiciona suporte parcial 461a mais de 100 novos idiomas.</p> 462 463<p>Os aplicativos podem obter a lista de localidades definida pelo usuário chamando 464<code>LocaleList.GetDefault()</code>. Para oferecer suporte ao maior número de localidades, o Android N está 465alterando a forma como resolve recursos. Não deixe de testar e verificar se seus aplicativos 466funcionam da forma esperada com a nova lógica de resolução de recursos.</p> 467 468<p>Para saber mais sobre o novo comportamento de resolução de recursos e sobre as práticas recomendadas que você deve 469seguir, consulte <a href="{@docRoot}preview/features/multilingual-support.html">Suporte a vários idiomas</a>.</p> 470 471 472<h2 id="emoji">Novos emoticons</h2> 473 474<p> 475 O Android N apresenta emoticons adicionais e recursos relacionados, tais como 476 emoticons com diferentes tons de pele e suporte a seletores 477 de variação. Se o seu aplicativo suporta emoticons, 478 siga as diretrizes abaixo para aproveitar estes recursos próprios para emoticons. 479</p> 480 481<ul> 482 <li> 483 <strong>Verifique se o dispositivo contém um emoticon antes de inseri-lo.</strong> 484 Para conferir quais emoticons estão presentes 485 na fonte do sistema, use o método {@link android.graphics.Paint#hasGlyph(String)}. 486 </li> 487 <li> 488 <strong>Verifique se um emoticon suporta seletores de variação.</strong> 489 Os seletores de variação permitem que você 490 apresente determinados emoticons em cores ou preto e branco. 491 Em dispositivos móveis, os aplicativos devem representar os emoticons em cores, e não em preto e branco. Porém, 492 se o seu aplicativo exibe emoticons em linha com o texto, ele deve usar a variação preto e branco. 493 Para determinar se um emoticon tem variação ou não, use o seletor de variação. 494 Para obter uma lista completa de caracteres com variações, consulte a seção 495 <em>sequências de variação de emoticon</em> da 496 <a class="external-link" href="http://www.unicode.org/Public/9.0.0/ucd/StandardizedVariants-9.0.0d1.txt"> 497 documentação sobre variações em Unicode</a>. 498 </li> 499 <li> 500 <strong>Verifique se um emoticon suporta tons de pele.</strong> O Android N permite que os usuários modifiquem o 501 tom de pele renderizado de emoticons como quiserem. Os aplicativos de teclado devem oferecer indicações 502 visuais para emoticons que tenham diversos tons de pele e permitir que os usuários 503 selecionem o tom preferido. Para determinar quais emoticons do sistema têm 504 modificadores de tom de pele, use o método {@link android.graphics.Paint#hasGlyph(String)} 505. Você pode determinar quais emoticons usam tons de pele lendo a 506 <a class="external-link" href="http://unicode.org/emoji/charts/full-emoji-list.html"> 507documentação do Unicode</a>. 508 </li> 509</ul> 510 511 512<h2 id="icu4">ICU4J APIs no Android</h2> 513 514<p> 515 Agora, o Android N oferece um subconjunto de <a href="http://site.icu-project.org/">ICU4J</a> APIs na estrutura do Android 516 no pacote <code>android.icu</code>. A migração é fácil e geralmente exige 517apenas a mudança do namespace <code>com.java.icu</code> para 518<code>android.icu</code>. Se você já usa um pacote ICU4J nos seus 519 aplicativos, a mudança para as APIs do <code>android.icu</code> disponibilizadas na estrutura do 520 Android pode reduzir substancialmente o tamanho do APK. 521</p> 522 523<p> 524 Para saber mais sobre as APIs ICU4J no Android, consulte <a href="{@docRoot}preview/features/icu4j-framework.html">Suporte ao ICU4J</a>. 525</p> 526 527 528 529<h2 id="gles_32">OpenGL™ ES 3.2 API</h2> 530 531<p>O Android N adiciona interfaces de estrutura e suporte de plataforma ao OpenGL ES 3.2, incluindo:</p> 532 533<ul> 534 <li> Todas as extensões do <a class="external-link" href="https://www.khronos.org/registry/gles/extensions/ANDROID/ANDROID_extension_pack_es31a.txt"> 535Pacote de extensão Android</a></a> (AEP), exceto <code>EXT_texture_sRGB_decode</code>. 536 <li> Framebuffers de ponto flutuante para HDR e sombreamento adiado. 537 <li> Chamadas de desenho a BaseVertex para possibilitar melhor organização em lotes e transmissão. 538 <li> Controle robusto de acesso a buffers para reduzir a sobrecarga do WebGL. 539</ul> 540 541<p>A API da estrutura do OpenGL ES 3.2 no Android N é fornecida pela classe 542<code>GLES32</code>. Ao usar o OpenGL ES 3.2, não deixe de declarar o 543requisito no arquivo manifesto usando o rótulo <code><uses-feature></code> e o 544atributo <code>android:glEsVersion</code>. </p> 545 546<p>Para obter mais informações sobre como usar o OpenGL ES, incluindo como verificar a versão do 547OpenGL ES compatível do dispositivo no tempo de execução, consulte o <a href="{@docRoot}guide/topics/graphics/opengl.html">guia da OpenGL ES API</a>.</p> 548 549 550<h2 id="android_tv_recording">Gravação do Android TV</h2> 551 552<p>O Android N adiciona a capacidade de gravar e reproduzir conteúdo de serviços de entrada 553do Android TV por meio de novas APIs de gravação. Criados usando as APIs atuais de time-shifting, 554os serviços de entrada de TV podem controlar quais dados de canal são gravados e como 555as sessões gravadas são salvas, bem como gerenciar a interação do usuário com o conteúdo gravado. </p> 556 557<p>Para obter mais informações, consulte <a href="{@docRoot}preview/features/tv-recording-api.html">Android TV Recording APIs</a>.</p> 558 559 560<h2 id="android_for_work">Android for Work</h2> 561 562<p>O Android for Work adiciona vários recursos e APIs para dispositivos que executam o Android N. 563Veja a seguir alguns destaques — para obter uma lista completa das mudanças, consulte 564<a href="{@docRoot}preview/features/afw.html">atualizações no Android for Work</a>.</p> 565 566<h3 id="work_profile_security_challenge">Desafio de segurança de perfil de trabalho </h3> 567 568<p> 569 Donos de perfis direcionados ao N SDK 570 podem especificar um desafio de segurança em separado para aplicativos em execução no 571 perfil de trabalho. O desafio de trabalho é exibido quando um usuário tenta abrir 572 qualquer aplicativo de trabalho. O preenchimento correto do desafio de segurança desbloqueia e, 573 se necessário, descriptografa o perfil de trabalho. Para donos de perfil, 574 <code>ACTION_SET_NEW_PASSWORD</code> solicita que o usuário defina um desafio 575 de trabalho e <code>ACTION_SET_NEW_PARENT_PROFILE_PASSWORD</code> um 576 bloqueio de dispositivo. 577</p> 578 579<p> 580 Os donos de perfil também podem definir políticas de senha distintas para o desafio de trabalho 581 (como o comprimento mínimo do PIN ou se é permitido usar a impressão digital 582para desbloquear o perfil) usando<code>setPasswordQuality()</code>, 583<code>setPasswordMinimumLength()</code> e métodos relacionados. O dono 584 de perfil também pode definir o bloqueio de dispositivo usando a instância de <code>DevicePolicyManager</code> 585 retornada pelo novo método <code>getParentProfileInstance()</code>. 586 Além disso, donos de perfil podem personalizar a tela de credenciais do 587 desafio de trabalho usando os novos métodos <code>setOrganizationColor()</code> e 588 <code>setOrganizationName()</code>. 589</p> 590<h3 id="turn_off_work">Desativar o trabalho </h3> 591 592<p>Os usuários podem alternar o modo de trabalho em dispositivos com um perfil de trabalho. Quando o modo de trabalho está 593desativado, o usuário gerenciado é encerrado temporariamente, o que desativa 594os aplicativos, a sincronização em segundo plano e as notificações do perfil de trabalho. Isso inclui o aplicativo do 595dono do perfil. Quando o modo de trabalho está desativado, o sistema exibe um ícone de status persistente 596 para lembrar ao usuário que não é possível iniciar aplicativos de trabalho. A tela de início 597indica que os aplicativos e widgets de trabalho não podem ser acessados. </p> 598 599<h3 id="always_on_vpn">Always on VPN </h3> 600 601<p>Os donos de dispositivo e perfil podem garantir que os aplicativos de trabalho se conectem sempre 602por meio de uma VPN especificada. O sistema inicia automaticamente a VPN após a 603 inicialização do dispositivo.</p> 604 605<p> 606 Os novos métodos <code>DevicePolicyManager</code> são 607 <code>setAlwaysOnVpnPackage()</code> e 608 <code>getAlwaysOnVpnPackage()</code>. 609</p> 610 611<p>Como os serviços de VPN podem ser vinculados diretamente pelo sistema sem interação com 612aplicativos, os clientes de VPN precisam processar novos pontos de entrada para o Always on VPN. Da 613 mesma forma que antes, os serviços são indicados ao sistema por um filtro de intenção 614 correspondente à ação <code>android.net.VpnService</code>. </p> 615 616<p> 617 Além disso, os usuários podem definir manualmente clientes do Always on VPN que implementam 618 métodos <code>VPNService</code> no usuário principal usando 619 <strong>Settings>More>Vpn</strong>. 620</p> 621 622<h3 id="custom_provisioning">Provisionamento personalizado</h3> 623 624<p> 625 Um aplicativo pode personalizar os fluxos de provisionamento do dono do perfil e do dispositivo 626 com cores e logos corporativos. 627 <code>DevicePolicyManager.EXTRA_PROVISIONING_MAIN_COLOR</code> personaliza 628 a cor do fluxo. <code>DevicePolicyManager.EXTRA_PROVISIONING_LOGO_URI</code> 629 personaliza o fluxo com um logo corporativo. 630</p> 631 632<h2 id="accessibility_enhancements">Aprimoramentos na acessibilidade</h2> 633 634<p>O Android N agora oferece Configurações de visão diretamente na tela de boas-vindas na instalação 635de novos dispositivos. Isso permite que os usuários descubram e configurem recursos de acessibilidade 636 em seus dispositivos de forma muito mais fácil, incluindo gesto de ampliação, tamanho 637da fonte, tamanho da tela e TalkBack. </p> 638 639<p>Com o posicionamento mais proeminente desses recursos de acessibilidade, os usuários 640ficarão mais propensos a experimentar o aplicativo com os recursos ativados. Não deixe de testar antecipadamente os aplicativos 641com essas configurações ativadas. Você pode ativá-las em Settings > 642Accessibility.</p> 643 644<p>Além disso, os serviços de acessibilidade no Android N podem ajudar usuários com deficiências 645motoras a tocar na tela. A nova API permite criar serviços com recursos 646como acompanhamento de face, acompanhamento de olho e varredura de pontos, entre outros, para atender 647às necessidades desses usuários.</p> 648 649<p>Para obter mais informações, consulte <code>android.accessibilityservice.GestureDescription</code> 650 na <a href="{@docRoot}preview/setup-sdk.html#docs-dl">Referência da API</a>, disponível para download.</p> 651 652 653<h2 id="direct_boot">Inicialização direta</h2> 654 655<p>A inicialização direta reduz os tempos de inicialização dos dispositivos e permite que aplicativos 656registrados tenham funcionalidade limitada, mesmo após uma reinicialização inesperada. 657Por exemplo, se um dispositivo criptografado reinicializar durante o sono do usuário, 658alarmes registrados, mensagens e chamadas recebidas podem agora continuar notificando 659o usuário normalmente. Isso também significa que serviços de acessibilidade podem ser 660disponibilizados imediatamente após um reinício.</p> 661 662<p>A inicialização direita aproveita a criptografia baseada em arquivo do Android N 663para ativar políticas de criptografia detalhadas para dados de sistema e aplicativos. 664O sistema usa um armazenamento criptografado pelo dispositivo para determinados dados de sistema e dados 665de aplicativos registrados explicitamente. Por padrão, um armazenamento criptografado por credencial é usado para todos 666os outros dados de sistema, dados de usuário, aplicativos e dados de aplicativos. </p> 667 668<p>Na inicialização, o sistema inicia em um modo restrito que permite 669acessar apenas dados criptografados pelo dispositivo, sem acesso geral a aplicativos ou dados. 670Se você deseja executar componentes nesse modo, pode registrá-los 671definindo um sinalizador no manifesto. Após a reinicialização, o sistema ativa 672componentes registrados transmitindo a intenção <code>LOCKED_BOOT_COMPLETED</code> 673. O sistema garante que dados de aplicativos registrados criptografados pelos dispositivos sejam disponibilizados 674antes do destravamento. Todos os outros dados ficarão indisponíveis até que o usuário confirme as credenciais 675 de tela de bloqueio para descriptografá-los. </p> 676 677Para obter mais informações, consulte <a href="{@docRoot}preview/features/direct-boot.html">Inicialização direta</a>.</p> 678</p> 679 680 681<h2 id="key_attestation">Confirmação de chaves</h2> 682 683<p>Os armazenamentos de chaves protegidos por hardware oferecem um método muito mais seguro para criar, armazenar 684e usar chaves de criptografia em dispositivos Android. Eles protegem chaves contra o kernel do Linux, 685possíveis vulnerabilidades do Android e extração 686em dispositivos com acesso root.</p> 687 688<p>Para permitir o uso de armazenamento de chaves protegido por hardware com maior facilidade e segurança, 689o Android N introduziu a confirmação de chaves. Aplicativos em dispositivos móveis e fora deles podem usar a confirmação de chaves 690para determinar com precisão se um par de chaves RSA ou EC 691está protegido por hardware, quais as propriedades do par de chaves e quais as restrições 692aplicadas ao uso e à validação. </p> 693 694<p>Aplicativos e serviços externos aos dispositivos móveis podem solicitar informações sobre um par de chaves 695por meio de um certificado de confirmação X.509, que deve estar assinado por uma 696chave de confirmação válida. A chave de confirmação é uma chave de assinatura ECDSA, 697injetada no armazenamento de chaves protegido por hardware do dispositivo na fábrica. 698Portanto, um certificado de confirmação assinado com uma chave de confirmação 699válida confirma a existência de um armazenamento de chaves protegido por hardware, além de 700detalhes dos pares de chaves desse armazenamento de chaves.</p> 701 702<p>Para garantir que o dispositivo esteja usando uma imagem Android oficial de fábrica 703e segura, a confirmação de chaves exige que o <a class="external-link" href="https://source.android.com/security/verifiedboot/verified-boot.html#bootloader_requirements">bootloader</a> 704 do dispositivo forneça as seguintes informações ao <a class="external-link" href="https://source.android.com/security/trusty/index.html">Ambiente 705 de execução confiável (TEE)</a>:</p> 706 707<ul> 708<li>A versão do SO e o nível de correção instalado no dispositivo</li> 709<li>A chave pública <a href="https://source.android.com/security/verifiedboot/index.html" class="external-link">Verified Boot</a> e seu status de bloqueio</li> 710 </ul> 711 712<p>Para obter mais informações sobre o recurso de armazenamento de chaves protegido por hardware, 713consulte o guia <a href="https://source.android.com/security/keystore/" class="external-link">Armazenamento de chaves protegido por hardware</a>.</p> 714 715<p>Além da confirmação de chaves, o Android N também introduziu 716 chaves associadas a impressões digitais que não são revogadas no cadastramento de impressões digitais.</p> 717 718<h2 id="network_security_config">Configuração de segurança de rede</h2> 719 720<p>No Android N, os aplicativos podem personalizar o comportamento de conexões seguras (HTTPS, TLS) 721de forma segura, sem modificação no código, usando a 722<em>Configuração de segurança de rede</em> declarativa em vez das 723APIs programáticas propensas a erro (por exemplo, X509TrustManager).</p> 724 725 <p>Recursos compatíveis:</p> 726<ul> 727<li><b>Âncoras de confiança personalizadas.</b> Permite que um aplicativo personalize quais 728autoridades de certificado (CA) são confiáveis para as conexões seguras. Por 729 exemplo, confiar em certificados autoassinados privados ou um restrito conjunto de CAs públicas. 730</li> 731<li><b>Substituições apenas em depuração.</b> Permite que um desenvolvedor de aplicativos depure 732conexões seguras do aplicativo com segurança, sem adicionar riscos à base 733instalada. 734</li> 735<li><b>Cancelamento do uso de tráfego de texto simples.</b> Permite que um aplicativo seja protegido contra 736o uso acidental de tráfego de texto simples.</li> 737<li><b>Fixação de certificados.</b> Um recurso avançado que permite que os aplicativos 738 limitem quais chaves de servidor são confiáveis para conexões seguras.</li> 739</ul> 740 741<p>Para obter mais configurações, consulte <a href="{@docRoot}preview/features/security-config.html">Configuração de segurança 742de rede</a>.</p> 743 744<h2 id="default_trusted_ca">Autoridade de certificado confiável padrão</h2> 745 746<p>Por padrão, os aplicativos direcionados ao Android N confiam apenas em certificados fornecidos pelo sistema 747e não confiam mais em Autoridades de certificado (CA) adicionadas pelo usuário. Os aplicativos direcionados ao Android 748N que querem confiar em CAs adicionadas pelo usuário devem usar a 749<a href="{@docRoot}preview/features/security-config.html">Configuração de segurança de rede</a> para 750especificar como confiar nas CAs de usuário.</p> 751 752<h2 id="apk_signature_v2">Esquema de assinatura de APK v2</h2> 753 754<p> 755 O Android N apresenta o esquema de assinatura de APK v2, um novo esquema de assinatura de aplicativo 756 que oferece instalações mais rápidas e maior proteção contra alterações não autorizadas 757 em arquivos APK. Por padrão, o Android Studio 2.2 e o plug-in do Android 758 para Gradle 2.2 assinam seu aplicativo usando o esquema de assinatura de APK v2 e 759 o esquema tradicional, que usa assinaturas JAR. 760</p> 761 762<p> 763 Embora seja recomendável aplicar o esquema de assinatura de APK v2 ao aplicativo, este novo 764 esquema não é obrigatório. Se o aplicativo não for compilado adequadamente ao usar o esquema 765de assinatura de APK v2, você poderá desativá-lo. O processo de desativação 766 faz com que o Android Studio 2.2 e o plug-in do Android para Gradle 2.2 assinem 767o aplicativo usando apenas o esquema de assinatura tradicional. Para assinar apenas com o 768 esquema tradicional, abra o arquivo do nível de módulo <code>build.gradle</code> e 769 adicione a linha <code>v2SigningEnabled false</code> à configuração de assinatura de sua 770 versão: 771</p> 772 773<pre> 774 android { 775 ... 776 defaultConfig { ... } 777 signingConfigs { 778 release { 779 storeFile file("myreleasekey.keystore") 780 storePassword "password" 781 keyAlias "MyReleaseKey" 782 keyPassword "password" 783 <strong>v2SigningEnabled false</strong> 784 } 785 } 786 } 787</pre> 788 789<p class="caution"><strong>Cuidado: </strong>Se você assinar o aplicativo usando o esquema de assinatura de APK 790 v2 e fizer novas alterações posteriormente, a assinatura do app 791 será invalidada. Por essa razão, use ferramentas como <code>zipalign</code> 792 antes de assinar o aplicativo usando o esquema de assinatura de APK v2, não depois. 793</p> 794 795<p> 796 Para obter mais informações, leia os documentos do Android Studio que descrevem como 797<a href="{@docRoot}studio/publish/app-signing.html#release-mode"> 798assinar um aplicativo</a> no Android Studio e como<a href="{@docRoot}studio/build/build-variants.html#signing"> configurar 799o arquivo de programação para assinar aplicativos</a> usando o plug-in do Android para Gradle. 800</p> 801 802<h2 id="scoped_directory_access">Acesso a diretórios com escopo</h2> 803 804<p>No Android N, os aplicativos podem usar novas APIs para solicitar acesso a determinados diretórios de <a href="{@docRoot}guide/topics/data/data-storage.html#filesExternal">armazenamento 805externo</a>, incluindo diretórios em mídias removíveis, tais como cartões 806SD. As novas APIs simplificam consideravelmente como o aplicativo acessa os 807diretórios de armazenamento externo padrão, tais como o diretório<code>Pictures</code>. Os aplicativos, 808como aplicativos de fotografia, podem usar essas APIs em vez de 809<code>READ_EXTERNAL_STORAGE</code>, que concede acesso a todos os diretórios de 810armazenamento, ou da Estrutura de acesso ao armazenamento, que faz o usuário navegar até 811o diretório.</p> 812 813<p>Além disso, as novas APIs simplificam as etapas executadas pelo usuário para conceder ao aplicativo 814acesso ao armazenamento externo. Quando você usa as novas APIs, o sistema usa uma IU de permissões simples 815que detalha claramente a qual diretório o aplicativo 816está solicitando acesso.</p> 817 818<p>Para obter mais informações, consulte a documentação para desenvolvedores 819<a href="{@docRoot}preview/features/scoped-folder-access.html">Acessos 820 a diretório com escopo</a>.</p> 821 822<h2 id="keyboard_shortcuts_helper">Auxiliar de atalhos de teclado</h2> 823 824<p> 825No Android N, o usuário pode pressionar "Alt + /" para acionar uma tela de <em>atalhos de teclado</em> 826que exibe todos os atalhos disponíveis do sistema e do 827aplicativo em questão. Os atalhos são recuperados automaticamente do menu do aplicativo, se 828estiverem disponíveis, mas os desenvolvedores podem fornecer listas próprias de atalhos 829para a tela. É possível fazer isso substituindo o novo método 830<code>Activity.onProvideKeyboardShortcuts()</code>, conforme descrito na 831<a href="{@docRoot}preview/setup-sdk.html#docs-dl">Referência da API</a>, disponível para download. 832</p> 833 834<p> 835Para acionar o auxiliar de atalhos de teclado em qualquer ponto do aplicativo, 836chame {@code Activity.requestKeyboardShortcutsHelper()} para a atividade correspondente. 837</p> 838 839<h2 id="sustained_performance_api">API de desempenho sustentado</h2> 840 841<p> 842O desempenho pode flutuar drasticamente em aplicativos executados por muito tempo porque o 843sistema aciona os mecanismos de sistema-em-um-chip quando os componentes do dispositivo atingem o 844limite de temperatura. Esta flutuação representa um desafio para desenvolvedores de aplicativos 845 que criam aplicativos de alto desempenho e longo tempo de execução. 846</p> 847 848<p> 849Para tratar estas limitações, o Android N inclui compatibilidade opcional para 850<em>modo de desempenho sustentado</em>, permitindo que OEMs ofereçam dicas sobre 851 capacidades de desempenho em dispositivo para aplicativos de longa duração. Os desenvolvedores de aplicativos 852podem usar essas dicas para ajustar os aplicativos para um nível de desempenho do dispositivo previsível 853e consistente em períodos longos de tempo. 854</p> 855 856<p> 857Desenvolvedores de aplicativos podem testar essa nova API na N Developer Preview 858apenas em dispositivos Nexus 6P. Para usar este recurso, 859configure a janela de sinalização de desempenho sustentado para a janela 860que você quer executar em modo de desempenho sustentado. Configure esta sinalização usando o método 861{@code Window.setSustainedPerformanceMode()}. O sistema desativará este modo 862automaticamente quando a janela não estiver mais em foco. 863</p> 864 865<h2 id="vr">Suporte a RV</h2> 866 867<p> 868O Android N adiciona compatibilidade de plataformas e otimizações para um novo Modo RV Mode que dá aos 869 desenvolvedores a capacidade de projetar experiências de RV móveis de alta qualidade para os usuários. Há diversas melhorias de desempenho 870, incluindo acesso a um núcleo exclusivo da CPU para aplicativos de RV. 871 Dentro dos aplicativos, é possível tirar vantagem do rastreamento inteligente da cabeça 872e de notificações estéreo que funcionam para RV. Mais importante, o Android N oferece 873gráficos de latência muito baixa. Para obter informações completas sobre a criação de aplicativos de RV para Android N, 874consulte o <a href="https://developers.google.com/vr/android/">Google VR SDK para Android</a>. 875</p> 876 877 878<h2 id="print_svc">Melhorias nos serviços de impressão</h2> 879 880<p> 881 No Android N, agora os desenvolvedores de serviços de impressão podem exibir informações adicionais 882 sobre impressoras e trabalhos de impressão individuais. 883</p> 884 885<p> 886 Ao listar impressoras individuais, agora um serviço de impressão pode definir 887ícones por impressora de duas maneiras: 888</p> 889 890<ul> 891 <li>É possível definir um ícone de um ID de recurso chamando 892 <code>PrinterInfo.Builder.setResourceIconId()</code> 893 </li> 894 895 <li>É possível exibir um ícone da rede chamando 896<code>PrinterInfo.Builder.setHasCustomPrinterIcon()</code> e definindo um 897retorno de chamada para quando o ícone for solicitado usando 898<code>android.printservice.PrinterDiscoverySession.onRequestCustomPrinterIcon()</code> 899 </li> 900</ul> 901 902<p> 903 Além disso, você pode fornecer atividade por impressora para exibir 904informações adicionais chamando <code>PrinterInfo.Builder.setInfoIntent()</code>. 905</p> 906 907<p> 908 É possível indicar o progresso e o status de trabalhos de impressão na 909notificação de trabalhos de impressão chamando 910<code>android.printservice.PrintJob.setProgress()</code> e 911<code>android.printservice.PrintJob.setStatus()</code>, respectivamente. 912</p> 913 914<p> 915 Para obter mais informações sobre estes métodos, consulte a <a href="{@docRoot}preview/setup-sdk.html#docs-dl">Referência da API</a>, disponível para download. 916</p> 917 918<h2 id="framemetrics_api">FrameMetricsListener API</h2> 919 920<p> 921A FrameMetricsListener API permite que um aplicativo monitore o desempenho de renderização 922 da IU. A API oferece este recurso ao expor uma API Pub/Sub em streaming para transferir informações de precisão 923de quadro à janela atual do aplicativo. Os dados retornados são 924equivalentes aos que<code><a href="{@docRoot}tools/help/shell.html#shellcommands">adb shell</a> 925dumpsys gfxinfo framestats</code> exibe, mas não estão mais limitados a 120 quadros. 926</p> 927 928<p> 929É possível usar o FrameMetricsListener para medir o desempenho da IU 930em nível de interação na produção sem conexão USB. Esta API 931permite a coleta de dados com granularidade muito maior do que 932{@code adb shell dumpsys gfxinfo}. A granularidade maior é possível porque 933o sistema pode coletar dados para determinadas interações no aplicativo; o sistema 934não precisa capturar um resumo global do desempenho 935do aplicativo nem limpar qualquer estado global. É possível usar este 936recurso para reunir dados de desempenho e capturar regressões no desempenho da IU 937para casos de uso reais dentro do aplicativo. 938</p> 939 940<p> 941Para monitorar uma janela, implemente o método de retorno de chamada <code>FrameMetricsListener.onMetricsAvailable()</code> 942e registre-o nessa janela. Para obter mais informações, consulte a 943documentação da classe{@code FrameMetricsListener} na 944<a href="{@docRoot}preview/setup-sdk.html#docs-dl">Referência da API</a>,disponível para download. 945</p> 946 947<p> 948A API fornece um objeto {@code FrameMetrics}, que contém dados de quadro que 949o subsistema de renderização relata para vários marcos no ciclo de vida de um quadro. 950As métricas suportadas são: {@code UNKNOWN_DELAY_DURATION}, 951{@code INPUT_HANDLING_DURATION}, {@code ANIMATION_DURATION}, 952{@code LAYOUT_MEASURE_DURATION}, {@code DRAW_DURATION}, {@code SYNC_DURATION}, 953{@code COMMAND_ISSUE_DURATION}, {@code SWAP_BUFFERS_DURATION}, 954{@code TOTAL_DURATION}e {@code FIRST_DRAW_FRAME}. 955</p> 956 957 958<h2 id="virtual_files">Arquivos virtuais</h2> 959 960<p> 961 Em versões anteriores do Android, o aplicativo podia usar a estrutura de 962 acesso ao armazenamento para permitir que os usuários selecionem arquivos de contas de armazenamento em nuvem, 963 como o Google Drive. No entanto, não é possível representar arquivos que 964não tenham uma representação direta de código de bytes; os arquivos precisam fornecer 965 um fluxo de entrada. 966</p> 967 968<p> 969 O Android N adiciona o conceito de <em>arquivos virtuais</em> à estrutura de acesso 970 ao armazenamento. O recurso de arquivos virtuais permite que seu 971{@link android.provider.DocumentsProvider} retorne URIs de documentos que possam ser 972usados com intenções {@link android.content.Intent#ACTION_VIEW} mesmo que não tenham 973uma representação direta de código de bytes. O Android N também permite que você 974 ofereça formatos alternativos para arquivos de usuário, sejam virtuais ou não. 975</p> 976 977<p> 978 Para obter o URI para um documento virtual em seu aplicativo, é preciso criar uma 979 {@link android.content.Intent} para abrir a IU do seletor de arquivos. Como um aplicativo 980não consegue abrir um arquivo virtual diretamente usando o método 981{@link android.content.ContentResolver#openInputStream(Uri) openInputStream()} 982, seu aplicativo não receberá arquivos virtuais se você não incluir a categoria 983{@link android.content.Intent#CATEGORY_OPENABLE}. 984</p> 985 986<p> 987 Depois que o usuário fizer uma seleção, o sistema chamará o método 988{@link android.app.Activity#onActivityResult onActivityResult()}. 989 O aplicativo pode recuperar o URI do arquivo virtual e obter um fluxo de resultados, como 990 demonstrado no snippet de código abaixo. 991</p> 992 993<pre> 994 // Other Activity code ... 995 996 final static private int REQUEST_CODE = 64; 997 998 // We listen to the OnActivityResult event to respond to the user's selection. 999 @Override 1000 public void onActivityResult(int requestCode, int resultCode, 1001 Intent resultData) { 1002 try { 1003 if (requestCode == REQUEST_CODE && 1004 resultCode == Activity.RESULT_OK) { 1005 1006 Uri uri = null; 1007 1008 if (resultData != null) { 1009 uri = resultData.getData(); 1010 1011 ContentResolver resolver = getContentResolver(); 1012 1013 // Before attempting to coerce a file into a MIME type, 1014 // check to see what alternative MIME types are available to 1015 // coerce this file into. 1016 String[] streamTypes = 1017 resolver.getStreamTypes(uri, "*/*"); 1018 1019 AssetFileDescriptor descriptor = 1020 resolver.openTypedAssetFileDescriptor( 1021 uri, 1022 streamTypes[0], 1023 null); 1024 1025 // Retrieve a stream to the virtual file. 1026 InputStream inputStream = descriptor.createInputStream(); 1027 } 1028 } 1029 } catch (Exception ex) { 1030 Log.e("EXCEPTION", "ERROR: ", ex); 1031 } 1032 } 1033</pre> 1034 1035<p> 1036 Para obter mais informações sobre como acessar arquivos de usuário, consulte o 1037<a href="{@docRoot}guide/topics/providers/document-provider.html">guia da estrutura 1038de acesso ao armazenamento</a>. 1039</p> 1040