• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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 &mdash; 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 &mdash; 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 &mdash; 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 &mdash; 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 &mdash;
264{@link android.net.ConnectivityManager#CONNECTIVITY_ACTION}, {@link
265android.hardware.Camera#ACTION_NEW_PICTURE} e {@link
266 android.hardware.Camera#ACTION_NEW_VIDEO} &mdash;, 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 &mdash; 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 &mdash; 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 &mdash; 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&trade; 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>&lt;uses-feature&gt;</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 &mdash; 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&gt;More&gt;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 &gt;
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  &#64;Override
1000  public void onActivityResult(int requestCode, int resultCode,
1001    Intent resultData) {
1002      try {
1003        if (requestCode == REQUEST_CODE &amp;&amp;
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