1page.title=Visão geral da API
2page.keywords=preview,sdk,compatibility
3page.tags=previewresources, androidm
4sdk.platform.apiLevel=22-mnc
5page.image=images/cards/card-api-overview_16-9_2x.png
6@jd:body
7
8
9<div id="qv-wrapper">
10<div id="qv">
11
12<h2>Neste documento
13 <a href="#" onclick="hideNestedItems('#toc44',this);return false;" class="header-toggle">
14        <span class="more">mostrar mais</span>
15        <span class="less" style="display:none">mostrar menos</span></a></h2>
16
17<ol id="toc44" class="hide-nested">
18  <li><a href="#app-linking">Vínculo de aplicativo</a></li>
19  <li><a href="#backup">Backup automático para aplicativos</a></li>
20  <li><a href="#authentication">Autenticação</a>
21    <ol>
22      <li><a href="#fingerprint-authentication">Autenticação com impressão digital</a></li>
23      <li><a href="#confirm-credential">Confirmação de credencial</a></li>
24    </ol>
25  </li>
26  <li><a href="#direct-share">Compartilhamento direto</a></li>
27  <li><a href="#voice-interactions">Interações por voz</a></li>
28  <li><a href="#assist">Auxiliar API</a></li>
29  <li><a href="#notifications">Notificações</a></li>
30  <li><a href="#bluetooth-stylus">Suporte para Bluetooth Stylus</a></li>
31  <li><a href="#ble-scanning">Digitalização de baixa energia por Bluetooth aprimorada</a></li>
32  <li><a href="#hotspot">Suporte a Hotspot 2.0 Release 1</a></li>
33  <li><a href="#4K-display">Modo de exibição 4K</a></li>
34  <li><a href="#behavior-themeable-colorstatelists">ColorStateLists com tema</a></li>
35  <li><a href="#audio">Recursos de áudio</a></li>
36  <li><a href="#video">Recursos de vídeo</a></li>
37  <li><a href="#camera">Recursos de câmera</a>
38    <ol>
39      <li><a href="#flashlight">API da lanterna</a></li>
40      <li><a href="#reprocessing">Reprocessamento da câmera</a></li>
41    </ol>
42  </li>
43  <li><a href="#afw">Recursos do Android for Work</a></li>
44</ol>
45
46<h2>Diferenças de API</h2>
47<ol>
48<li><a href="{@docRoot}preview/download.html">API de nível 22 para M Preview &raquo;</a> </li>
49</ol>
50
51</div>
52</div>
53
54<p>O M Developer Preview fornece uma visualização avançada no próximo lançamento
55 para a plataforma Android, oferecendo novos recursos para desenvolvedores e usuários
56de aplicativos. Este documento fornece uma introdução às APIs mais notáveis.</p>
57
58<p>O M Developer Preview foi feito para <strong>novos desenvolvedores
59adotantes</strong> e <strong>testadores</strong>. Caso tenha interesse
60 em influenciar a direção da estrutura do Android,
61<a href="{@docRoot}preview/setup-sdk.html">experimente o M Developer
62 Preview</a> e envie-nos feedback!</p>
63
64<p class="caution"><strong>Cuidado:</strong> não publique aplicativos
65que usam o M Developer Preview na Google Play Store.</p>
66
67<p class="note"><strong>Observação:</strong> este documento frequentemente
68menciona classes e métodos que ainda não possuem material de referência disponível em <a href="{@docRoot}">developer.android.com</a>. Esses elementos de API
69são formatados em {@code code style} neste documento (sem hyperlinks). Para a
70documentação de API preliminar destes elementos, faça o download da <a href="{@docRoot}preview/download.html#docs">referência da prévia</a>.</p>
71
72<h3>Alterações importantes de comportamento</h3>
73
74<p>Caso tenha publicado anteriormente um aplicativo para Android, saiba que ele pode ser afetado
75pelas alterações na plataforma.</p>
76
77<p>Consulte <a href="behavior-changes.html">alterações de comportamento</a> para obter mais informações.</p>
78
79<h2 id="app-linking">Vínculo de aplicativo</h2>
80<p>Esta prévia aprimora o sistema de intenções do Android fornecendo vínculo de aplicativo mais poderoso.
81Este recurso permite que você associe um aplicativo com um domínio de web próprio. Com base nesta
82associação, a plataforma pode determinar o aplicativo padrão a ser usado para lidar com um link da web
83em particular e ignorar a solicitação aos usuários para selecionar um aplicativo. Para aprender como implementar este aplicativo, consulte
84<a href="{@docRoot}preview/features/app-linking.html">vínculo de aplicativo</a>.
85
86<h2 id="backup">Backup automático para aplicativos</h2>
87<p>O sistema agora realiza backup automático completo de dados e restauração para aplicativos. Este comportamento
88é ativado por padrão para aplicativos com M Preview; não é necessário mais código adicional. Se
89os usuários excluírem as contas da Google, os dados de backup também serão excluídos. Para aprender como este recurso
90funciona e como configurar o backup no sistema do arquivo, consulte
91<a href="{@docRoot}preview/backup/index.html">backup automático para aplicativos</a>.</p>
92
93<h2 id="authentication">Autenticação</h2>
94<p>Esta prévia oferece novas APIs para permitir que você autentique os usuários usando digitalizadores de impressão digital em dispositivos
95suportados e verifique o quão recentemente os usuários autenticaram pela última vez usando o
96mecanismo de desbloqueio por dispositivo (como senha de tela de bloqueio). Use essas APIs em conjunto com
97o <a href="{@docRoot}training/articles/keystore.html">sistema Android Keystore</a>.</p>
98
99<h3 id="fingerprint-authentication">Autenticação com impressão digital</h3>
100
101<p>Para autenticar os usuários por meio de digitalização de impressão digital, adquira uma instância da nova classe
102{@code android.hardware.fingerprint.FingerprintManager} e chame o método
103{@code FingerprintManager.authenticate()}. O aplicativo deve ser executado em um dispositivo
104compatível com sensor de impressão digital. Deve-se implementar a interface do usuário para o fluxo de autenticação
105de impressão digital no aplicativo e usar o ícone de impressão digital padrão do Android na IU.
106O ícone de impressão digital do Android ({@code c_fp_40px.png}) é incluído no
107<a href="https://github.com/googlesamples/android-FingerprintDialog" class="external-link">aplicativo de exemplo</a>. Caso esteja desenvolvendo vários aplicativos que usam
108autenticação de impressão digital, observe que cada aplicativo deve autenticar a impressão digital do usuário independentemente.
109</p>
110
111<p>Para usar este recurso no aplicativo, adicione primeiro a permissão {@code USE_FINGERPRINT} no
112manifesto.</p>
113
114<pre>
115&lt;uses-permission
116        android:name="android.permission.USE_FINGERPRINT" /&gt;
117</pre>
118
119<img src="{@docRoot}preview/images/fingerprint-screen.png" srcset="{@docRoot}preview/images/fingerprint-screen.png 1x, {@docRoot}preview/images/fingerprint-screen_2x.png 2x" style="float:right; margin:0 0 10px 20px" width="282" height="476" />
120
121<p>Para ver a implementação do aplicativo da autenticação com impressão digital, consulte o
122<a href="https://github.com/googlesamples/android-FingerprintDialog" class="external-link">
123 exemplo de caixa de diálogo de impressão digital</a>.</p>
124
125<p>Caso esteja testando este recurso, siga estas etapas:</p>
126<ol>
127<li>Instale o Android SDK Tools Revision 24.3, caso ainda não tenha instalado.</li>
128<li>Registre uma nova impressão digital no emulador acessando
129<strong>Configurações &gt; Segurança &gt; Impressão digital</strong> e, em seguida, siga as instruções de registro.</li>
130<li>Use um emulador para emular eventos de toque de dedo com o
131comando a seguir. Use o mesmo comando para emular os eventos de toque de impressão digital na tela de
132bloqueio ou no aplicativo.
133<pre class="no-prettyprint">
134adb -e emu finger touch &lt;finger_id&gt;
135</pre>
136<p>No Windows, talvez seja necessário executar {@code telnet 127.0.0.1 &lt;emulator-id&gt;} seguido de
137{@code finger touch &lt;finger_id&gt;}.
138</p>
139</li>
140</ol>
141
142<h3 id="confirm-credential">Confirmação de credencial</h3>
143<p>O aplicativo pode autenticar os usuários com base no quão recentemente o dispositivo foi desbloqueado pela última vez. Este
144recurso libera o usuário de ter que lembrar de senhas específicas de aplicativo extras e evita
145a necessidade de implementar a própria interface do usuário de autenticação. O aplicativo deve usar este recurso
146em conjunto com uma implementação de chave secreta ou pública para a implementação de usuário.</p>
147
148<p>Para definir uma duração de tempo limite em que a mesma chave pode ser usada novamente
149após o usuário autenticar, chame o novo método
150{@code android.security.keystore.KeyGenParameterSpec.setUserAuthenticationValidityDurationSeconds()}
151 ao definir um {@link javax.crypto.KeyGenerator} ou
152{@link java.security.KeyPairGenerator}. Este recurso funciona para operações criptográficas
153simétricas.</p>
154
155<p>Evite exibir o diálogo de nova autenticação excessivamente — os aplicativos devem tentar
156usar o objeto criptográfico primeiro e, se o tempo limite expirar, usar o método
157{@link android.app.KeyguardManager#createConfirmDeviceCredentialIntent(java.lang.CharSequence, java.lang.CharSequence) createConfirmDeviceCredentialIntent()}
158 para autenticar novamente o usuário dentro do aplicativo.
159</p>
160
161<p>Para ver uma implementação de aplicativo deste recurso, consulte o
162<a href="https://github.com/googlesamples/android-ConfirmCredential" class="external-link">
163exemplo de confirmação de credencial</a>.</p>
164
165<h2 id="direct-share">Compartilhamento direto</h2>
166
167<img src="{@docRoot}preview/images/direct-share-screen.png" srcset="{@docRoot}preview/images/direct-share-screen.png 1x, {@docRoot}preview/images/direct-share-screen_2x.png 2x" style="float:right; margin:0 0 20px 30px" width="312" height="329" />
168
169<p>Esta prévia fornece as APIs para tornar o compartilhamento intuitivo e rápido para os usuários. É possível
170definir os <em>alvos de compartilhamento direto</em> que iniciam uma atividade específica no aplicativo.
171Esses alvos de compartilhamento direto são expostos aos usuários por meio do menu <em>Compartilhar</em>. Este recurso permite que os usuários
172compartilhem conteúdos aos alvos, como contatos, dentro de outros aplicativos. Por exemplo: o alvo de compartilhamento direto
173pode iniciar uma atividade em outro aplicativo de rede social, o que permite que o usuário compartilhe o conteúdo diretamente
174para um amigo ou comunidade específica neste aplicativo.</p>
175
176<p>Para ativar os alvos de compartilhamento direto, deve-se definir uma classe que estende a classe
177{@code android.service.} <br>
178{@code chooser.ChooserTargetService}. Declare o
179{@code ChooserTargetService} no manifesto. Dentro desta declaração, especifique a permissão
180{@code BIND_CHOOSER_TARGET_SERVICE} e um filtro de intenções na ação
181{@code SERVICE_INTERFACE}.</p>
182<p>O seguinte exemplo mostra como se deve declarar o {@code ChooserTargetService} no
183manifesto.</p>
184<pre>
185&lt;service android:name=".ChooserTargetService"
186        android:label="&#64;string/service_name"
187        android:permission="android.permission.BIND_CHOOSER_TARGET_SERVICE"&gt;
188    &lt;intent-filter&gt;
189        &lt;action android:name="android.service.chooser.ChooserTargetService" /&gt;
190    &lt;/intent-filter&gt;
191&lt;/service&gt;
192</pre>
193
194<p>Para cada atividade que quiser expor ao {@code ChooserTargetService}, adicione um elemento
195{@code &lt;meta-data&gt;} com o nome
196{@code "android.service.chooser.chooser_target_service"} no manifesto do aplicativo.
197</p>
198
199<pre>
200&lt;activity android:name=".MyShareActivity”
201        android:label="&#64;string/share_activity_label"&gt;
202    &lt;intent-filter>
203        &lt;action android:name="android.intent.action.SEND" /&gt;
204    &lt;/intent-filter>
205&lt;meta-data
206        android:name="android.service.chooser.chooser_target_service"
207        android:value=".ChooserTargetService" /&gt;
208&lt;/activity>
209</pre>
210
211<h2 id="voice-interactions">Interações por voz</h2>
212<p>
213Esta prévia fornece uma API de interação por voz que, junto com
214<a href="https://developers.google.com/voice-actions/" class="external-link">ações de voz</a>
215, permite a criação de experiências por voz nos aplicativos. Chame o método
216{@code android.app.Activity.isVoiceInteraction()} para determinar se a atividade
217foi iniciada em resposta à ação de voz. Caso tenha sido iniciada, o aplicativo pode usar a classe
218{@code android.app.VoiceInteractor} para solicitar uma confirmação de voz do usuário,
219selecionar a partir de uma lista de opções e muito mais. Para aprender mais sobre a implementação de ações de voz, consulte
220<a href="https://developers.google.com/voice-actions/interaction/" class="external-link">o site de desenvolvedor de ações de voz</a>.
221</p>
222
223<h2 id="assist">Auxiliar API</h2>
224<p>
225Esta prévia oferece uma nova maneira de usuários se envolverem com os aplicativos com um assistente. Para usar este
226recurso, o usuário deve possibilitar que o assistente use o contexto atual. Quando ativado,
227o usuário pode invocar um assistente dentro de qualquer aplicativo mantendo o botão <strong>Iniciar</strong> pressionado.</p>
228<p>O aplicativo pode optar por não compartilhar o contexto atual com o assistente configurando o sinalizador
229{@link android.view.WindowManager.LayoutParams#FLAG_SECURE}. Além do conjunto
230padrão de informações que a plataforma passa ao assistente, o aplicativo pode compartilhar
231informações adicionais usando a nova classe {@code android.app.Activity.AssistContent}.</p>
232
233<p>Para fornecer ao assistente contexto adicional do aplicativo, siga estas etapas:</p>
234
235<ol>
236<li>Implemente a interface {@link android.app.Application.OnProvideAssistDataListener}.</li>
237<li>Registre esta escuta usando
238{@link android.app.Application#registerOnProvideAssistDataListener(android.app.Application.OnProvideAssistDataListener) registerOnProvideAssistDataListener()}.</li>
239<li>Para fornecer informações contextuais específicas da atividade, substitua o retorno de chamada
240{@link android.app.Activity#onProvideAssistData(android.os.Bundle) onProvideAssistData()}
241 e, opcionalmente, o novo retorno de chamada {@code Activity.onProvideAssistContent()}.
242</ol>
243
244<h2 id="notifications">Notificações</h2>
245<p>Esta prévia adiciona as seguintes alterações de API às notificações:</p>
246<ul>
247  <li>Novo nível de filtro {@code NotificationListenerService.INTERRUPTION_FILTER_ALARMS} que corresponde
248ao modo "não perturbe" de <em>despertadores apenas</em>.</li>
249  <li>Novo valor da categoria {@code Notification.CATEGORY_REMINDER} que é usado para distinguir
250lembretes de agendamentos do usuário de outros eventos (
251{@link android.app.Notification#CATEGORY_EVENT}) e despertadores (
252{@link android.app.Notification#CATEGORY_ALARM}).</li>
253  <li>Nova classe {@code android.graphics.drawable.Icon} que pode ser anexada às notificações
254por meio dos métodos {@code Notification.Builder.setSmallIcon(Icon)} e
255{@code Notification.Builder.setLargeIcon(Icon)}.</li>
256  <li>Novo método {@code NotificationManager.getActiveNotifications()} que permite que os aplicativos
257descubram quais das notificações ainda estão ativas. Para ver uma implementação de aplicativo que usa este recurso,
258consulte o <a href="https://github.com/googlesamples/android-ActiveNotifications" class="external-link">exemplo de notificações ativas</a>.</li>
259</ul>
260
261<h2 id="bluetooth-stylus">Suporte para Bluetooth Stylus</h2>
262<p>Esta prévia fornece um suporte aprimorado para a entrada de usuário usando um Bluetooth Stylus. Os usuários podem
263parear e conectar um Bluetooth Stylus compatível com o telefone ou tablet.  Quando conectado, as informações
264de posição da tela tátil são fundidas com as informações de botão e pressão do Stylus
265para fornecer um alcance maior de expressão em comparação à tela tátil sozinha. O aplicativo pode escutar o pressionar
266de botões do Stylus e realizar ações secundárias registrando os novos retornos de chamada
267{@code View.onStylusButtonPressListener} e {@code GestureDetector.OnStylusButtonPressListener}
268 na atividade.</p>
269
270<p>Use as constantes e os métodos {@link android.view.MotionEvent} para detectar as interações
271de botão do Stylus:</p>
272<ul>
273<li>Se o usuário toca no Stylus com um botão na tela do aplicativo, o método
274{@link android.view.MotionEvent#getToolType(int) getTooltype()} retorna
275{@link android.view.MotionEvent#TOOL_TYPE_STYLUS}.</li>
276<li>Para aplicativos com M Preview, o método
277{@link android.view.MotionEvent#getButtonState() getButtonState()}
278 retorna {@code MotionEvent.STYLUS_BUTTON_PRIMARY} quando o usuário
279pressiona o botão principal do Stylus. Se o Stylus tiver um segundo botão, o mesmo método retorna
280{@code MotionEvent.STYLUS_BUTTON_SECONDARY} quando o usuário o pressiona. Se o usuário pressiona
281os dois botões simultaneamente, o método retorna os valores com OR juntos (
282{@code STYLUS_BUTTON_PRIMARY|STYLUS_BUTTON_SECONDARY}).</li>
283<li>
284Para aplicativos com uma versão de plataforma inferior , o método
285{@link android.view.MotionEvent#getButtonState() getButtonState()} retorna
286{@link android.view.MotionEvent#BUTTON_SECONDARY} (para o pressionar do botão principal do Stylus),
287{@link android.view.MotionEvent#BUTTON_TERTIARY} (para o pressionar do botão secundário do Stylus) ou ambos.
288</li>
289</ul>
290
291<h2 id="ble-scanning">Digitalização de baixa energia por Bluetooth aprimorada</h2>
292<p>
293Se o aplicativo realizar digitalizações de baixa energia por Bluetooth, é possível usar o novo método
294{@code android.bluetooth.le.ScanSettings.Builder.setCallbackType()} para especificar
295que você quer que os retornos de chamada sejam notificados apenas quando um pacote de propaganda correspondente ao conjunto
296{@link android.bluetooth.le.ScanFilter} for encontrado primeiro e quando
297ele não for visto por um período. Esta abordagem de digitalização é mais eficiente
298do que a fornecida na versão anterior da plataforma.
299</p>
300
301<h2 id="hotspot">Suporte a Hotspot 2.0 Release 1</h2>
302<p>
303Esta prévia adiciona suporte ao Hotspot 2.0 Release 1 nos dispositivos Nexus 6 e Nexus 9. Para fornecer
304as credenciais de Hotspot 2.0 no aplicativo, use os novos métodos da classe
305{@link android.net.wifi.WifiEnterpriseConfig}, como {@code setPlmn()} e
306{@code setRealm()}. No objeto {@link android.net.wifi.WifiConfiguration}, é possível definir os campos
307{@link android.net.wifi.WifiConfiguration#FQDN} e {@code providerFriendlyName}.
308A nova propriedade {@code ScanResult.PasspointNetwork} indica se uma rede detectada representa
309um ponto de acesso Hotspot 2.0.
310</p>
311
312<h2 id="4K-display">Modo de exibição 4K</h2>
313<p>A plataforma agora permite que aplicativos solicitem que a resolução seja aprimorada para renderização 4K
314em hardware compatível. Para consultar a resolução física atual, use as novas APIs
315{@code android.view.Display.Mode}. Se a IU for desenhada em uma resolução lógica
316menor e for redimensionada para uma resolução física maior, saiba que a resolução física que o método
317{@code Display.Mode.getPhysicalWidth()} retorna pode ser diferente da resolução
318física informada por {@link android.view.Display#getSize(android.graphics.Point) getSize()}.</p>
319
320<p>É possível solicitar que o sistema altere a resolução física no aplicativo à medida que ele é executado configurando
321a propriedade {@code WindowManager.LayoutParams.preferredDisplayModeId} da janela do aplicativo.  Este
322recurso é útil se quiser alternar para a resolução de exibição 4K. Enquanto estiver no modo de exibição 4K,
323a IU continua a ser renderizada na resolução original (como 1080 p) e é escalonada para 4K, mas os objetos
324{@link android.view.SurfaceView} podem exibir o conteúdo na resolução nativa.</p>
325
326<h2 id="behavior-themeable-colorstatelists">ColorStateLists com tema</h2>
327<p>Os atributos de tema agora são suportados no
328{@link android.content.res.ColorStateList} para dispositivos que executam o M Preview. Os métodos
329{@link android.content.res.Resources#getColorStateList(int) getColorStateList()} e
330{@link android.content.res.Resources#getColor(int) getColor()} ficaram obsoletos. Caso esteja chamando
331essas APIs, chame os novos métodos {@code Context.getColorStateList()} ou
332{@code Context.getColor()}. Esses métodos também estão disponíveis na biblioteca
333v4 appcompat via {@link android.support.v4.content.ContextCompat}.</p>
334
335<h2 id="audio">Recursos de áudio</h2>
336
337<p>Esta prévia adiciona aprimoramentos ao processamento de áudio no Android, incluindo: </p>
338<ul>
339  <li>Suporte para protocolo <a href="http://en.wikipedia.org/wiki/MIDI" class="external-link">MIDI</a>
340, com as novas APIs {@code android.media.midi}. Use essas APIs para enviar e receber eventos
341de MIDI.</li>
342  <li>Use as novas classes {@code android.media.AudioRecord.Builder} e {@code android.media.AudioTrack.Builder}
343 para criar captura de áudio digital e objetos de reprodução, respectivamente,
344e configure a fonte de áudio e as propriedades do coletor para substituir os padrões do sistema.</li>
345  <li>Ganchos de API para associação de dispositivos de entrada e áudio. Isto é particularmente útil se o aplicativo
346permite que os usuários iniciem uma pesquisa de voz a partir de um controle de jogo ou controle remoto para Android
347TV. O sistema invoca o novo retorno de chamada {@code android.app.Activity.onSearchRequested()} quando
348o usuário inicia uma pesquisa. Para determinar se o dispositivo de entrada do usuário tem um microfone integrado, recupere
349o objeto {@link android.view.InputDevice} deste retorno de chamada e, em seguida, chame o novo método
350{@code InputDevice.hasMic()}.</li>
351  <li>Novas classes {@code android.media.AudioDevicesManager} que permitem que você
352recupere uma lista completa de todas as fontes e dispositivos de áudio do coletor anexados. Também é possível especificar um objeto
353{@code android.media.OnAudioDeviceConnectionListener} caso queira que o aplicativo seja notificado
354quando um dispositivo de áudio for conectado ou desconectado.</li>
355</ul>
356
357<h2 id="video">Recursos de vídeo</h2>
358<p>Esta prévia adiciona novas capacidades às APIs de processamento de vídeo, incluindo:</p>
359<ul>
360<li>A nova classe {@code android.media.MediaSync} que ajuda os aplicativos a renderizar transmissões
361de vídeo e áudio sincronizadamente. Os buffers de áudio são enviados sem bloqueio e retornados
362por um retorno de chamada. Eles também suportam taxa de reprodução dinâmica.
363</li>
364<li>O novo evento {@code MediaDrm.EVENT_SESSION_RECLAIMED}, que indica que uma sessão aberta pelo aplicativo
365foi recuperada pelo gerenciador de recursos. Se o aplicativo usa sessões de DRM, deve-se
366lidar com este evento e garantir que uma sessão recuperada não seja usada.
367</li>
368<li>O novo código de erro {@code MediaCodec.CodecException.ERROR_RECLAIMED}, que indica que o gerenciador
369de recurso recuperou o recurso de mídia usado pelo codec. Com esta exceção, o codec
370deve ser liberado, como se fosse movido para o estado terminal.
371</li>
372<li>A nova interface {@code MediaCodecInfo.CodecCapabilities.getMaxSupportedInstances()} para obter
373uma dica do número máximo suportado de instâncias de codec concorrentes.
374</li>
375<li>O novo método {@code MediaPlayer.setPlaybackParams()} para definir a taxa de reprodução de mídia
376para reprodução de movimento lento ou rápido. Ele também estica ou acelera a reprodução de áudio automaticamente
377em conjunto com o vídeo.</li>
378</ul>
379
380<h2 id="camera">Recursos de câmera</h2>
381<p>Esta prévia inclui as seguintes novas APIs para acessar a lanterna da câmera
382e para o reprocessamento da câmera de imagens:</p>
383
384<h3 id="flashlight">API da lanterna</h3>
385<p>Se um dispositivo de câmera tem uma unidade de flash, é possível chamar o método {@code CameraManager.setTorchMode()}
386para ligar ou desligar o modo de tocha da unidade de flash sem abrir o dispositivo da câmera. O aplicativo
387não tem propriedade exclusiva da unidade de flash ou do dispositivo de câmera. O modo de tocha é desativado
388e torna-se indisponível sempre que o dispositivo de câmera estiver indisponível ou quando outros
389recursos de câmera que mantêm a tocha ativada ficam indisponíveis. Outros aplicativos também podem chamar {@code setTorchMode()}
390para desativar o modo de tocha. Quando o aplicativo que ativou o modo
391de tocha for fechado, o modo é desativado.</p>
392
393<p>É possível registrar um retorno de chamada para ser notificado sobre o estado da tocha chamando o método
394{@code CameraManager.registerTorchCallback()}. Na primeira vez que o retorno de chamada é registrado,
395ele é imediatamente chamado com o estado do modo de tocha de todos os dispositivos de câmera conhecidos com
396uma unidade de flash. Se o modo de tocha é ativado ou desativado, o método
397{@code CameraManager.TorchCallback.onTorchModeChanged()} é invocado.</p>
398
399<h3 id="reprocessing">API de reprocessamento</h3>
400<p>A API {@link android.hardware.camera2 Camera2} é estendida para suportar YUV e reprocessamento
401de imagem de formato opaco privado. O aplicativo determina se as capacidades de reprocessamento estão disponíveis
402via {@code CameraCharacteristics.REQUEST_AVAILABLE_CAPABILITIES}. Se um dispositivo suporta o reprocessamento,
403é possível criar uma sessão de captura de câmera de reprocessamento chamando
404{@code CameraDevice.createReprocessableCaptureSession()} e criando solicitações para o reprocessamento
405do buffer de entrada.</p>
406
407<p>Use a classe {@code ImageWriter} para conectar o fluxo de buffer de entrada à entrada de reprocessamento
408da câmera. Para obter um buffer vazio, siga este modelo de programação:</p>
409
410<ol>
411<li>Chame o método {@code ImageWriter.dequeueInputImage()}.</li>
412<li>Preencha os dados no buffer de entrada.</li>
413<li>Envie o buffer à câmera chamando o método {@code ImageWriter.queueInputImage()}.</li>
414</ol>
415
416<p>Caso esteja usando um objeto {@code ImageWriter} junto com uma imagem
417{@code android.graphics.ImageFormat.PRIVATE}, o aplicativo não poderá acessar os dados
418da imagem diretamente. Em vez disso, passe a imagem {@code ImageFormat.PRIVATE} diretamente ao
419{@code ImageWriter} chamando o método {@code ImageWriter.queueInputImage()} sem nenhuma
420cópia de buffer.</p>
421
422<p>A classe {@code ImageReader} agora suporta as transmissões de imagem
423de formato {@code android.graphics.ImageFormat.PRIVATE}. Este suporte permite que o aplicativo mantenha uma fila de imagem circular de imagens de saída
424{@code ImageReader}, selecione uma ou mais imagens e envie-as para
425{@code ImageWriter} para o reprocessamento de câmera.</p>
426
427<h2 id="afw">Recursos do Android for Work</h2>
428<p>Esta prévia inclui as seguintes novas APIs para Android for Work:</p>
429<ul>
430  <li><strong>Controles aprimorados para dispositivos de uso único e pertencentes a empresas:</strong> O dono do dispositivo
431pode controlar as seguintes configurações para aprimorar
432os dispositivos de uso único pertencentes a empresas (COSU):
433  <ul>
434    <li>Desativar ou reativar a proteção de bloqueio com o método
435{@code DevicePolicyManager.setKeyguardEnabledState()}.</li>
436    <li>Desativar ou reativar a barra de status (incluindo configurações rápidas,
437notificações e o gesto de arrastar para cima que inicia o Google Now) com o método
438{@code DevicePolicyManager.setStatusBarEnabledState()}.</li>
439    <li>Desativar ou reativar inicialização segura com a constante {@link android.os.UserManager}
440{@code DISALLOW_SAFE_BOOT}.</li>
441    <li>Evitar que a tela desligue quando conectada com a constante
442{@link android.provider.Settings.Global} {@code STAY_ON_WHILE_PLUGGED_IN}.</li>
443  </ul>
444  </li>
445  <li><strong>Instalação e desinstalação silenciosa de aplicativos pelo dono do dispositivo:</strong> O dono do dispositivo pode agora
446instalar e desinstalar aplicativos silenciosamente usando as APIs {@link android.content.pm.PackageInstaller},
447independente do Google Play for Work. É possível tomar providências para os dispositivos
448por meio de um dono do dispositivo que recupera e instala aplicativos se a interação de usuário. Este recurso é útil para ativar a provisão de um toque
449de telefones públicos ou de outros dispositivos sem a ativação da conta Google.</li>
450<li><strong>Acesso silencioso de certificado empresarial: </strong> Quando um aplicativo chama
451{@link android.security.KeyChain#choosePrivateKeyAlias(android.app.Activity,android.security.KeyChainAliasCallback,java.lang.String[],java.security.Principal[],java.lang.String,int,java.lang.String) choosePrivateKeyAlias()}
452, antes do usuário receber a solicitação para selecionar um certificado, o perfil ou dono do dispositivo
453pode chamar o método {@code DeviceAdminReceiver.onChoosePrivateKeyAlias()} para fornecer
454o alias silenciosamente ao aplicativo da solicitação. Este recurso permite que você forneça acesso de aplicativos gerenciados para certificados
455sem a interação de usuário.</li>
456<li><strong>Aceitação automática de atualizações do sistema.</strong> Ao configurar a política de atualização do sistema com
457{@code DevicePolicyManager.setSystemUpdatePolicy()}, o dono do dispositivo pode aceitar automaticamente a atualização
458do sistema, no caso de um dispositivo público, ou adiar a atualização e evitar
459que ela seja feita pelo usuário por até 30 dias. Além disso, um administrador pode definir uma janela de tempo diária
460em que uma atualização deve ser realizada. Por exemplo: durante os momentos em que um dispositivo público não está em uso. Quando
461uma atualização do sistema está disponível, o sistema verifica se o aplicativo de controlador de política de trabalho definiu uma política de atualização
462do sistema e, portanto, comporta-se de acordo com a definição.
463</li>
464<li>
465<strong>Instalação de certificado delegado:</strong> Um perfil ou dono do dispositivo pode agora fornecer ao aplicativo
466de terceiros a habilidade de chamar essas APIs de gerenciamento
467de certificado de {@link android.app.admin.DevicePolicyManager}:
468<ul>
469  <li>{@link android.app.admin.DevicePolicyManager#getInstalledCaCerts(android.content.ComponentName)
470getInstalledCaCerts()}</li>
471  <li>{@link android.app.admin.DevicePolicyManager#hasCaCertInstalled(android.content.ComponentName,byte[])
472hasCaCertInstalled()}</li>
473  <li>{@link android.app.admin.DevicePolicyManager#installCaCert(android.content.ComponentName,byte[])
474installCaCert()}</li>
475  <li>{@link android.app.admin.DevicePolicyManager#uninstallCaCert(android.content.ComponentName,byte[])
476uninstallCaCert()}</li>
477  <li>{@link android.app.admin.DevicePolicyManager#uninstallAllUserCaCerts(android.content.ComponentName)
478uninstallAllUserCaCerts()}</li>
479  <li>{@link android.app.admin.DevicePolicyManager#installKeyPair(android.content.ComponentName,java.security.PrivateKey,java.security.cert.Certificate,java.lang.String)
480installKeyPair()}</li>
481</ul>
482</li>
483<li><strong>Proteção de redefinição de fábrica da empresa:</strong> Ao preparar um dono do dispositivo, agora é possível
484configurar parâmetros para desbloquear a proteção de redefinição de fábrica (FRP) configurando o pacote
485{@code DeviceManagerPolicy.EXTRA_PROVISIONING_RESET_PROTECTION_PARAMETERS}. Um aplicativo de programador
486NFC pode fornecer estes parâmetros depois que um dispositivo for redefinido para desbloquear o FRP e preparar o dispositivo,
487sem a necessidade da conta Google anteriormente configurada. Caso não modifique esses parâmetros,
488o FRP permanece no local e evita que o dispositivo seja ativado sem as credenciais
489Google anteriormente ativadas.
490<p>Além disso, ao configurar as restrições do aplicativo nos serviços Google, o dono do dispositivo pode especificar contas
491Google alternativas para desbloquear o FRP para substituir as contas ativadas no dispositivo.</p>
492</li>
493<img src="{@docRoot}preview/images/work-profile-screen.png" srcset="{@docRoot}preview/images/work-profile-screen.png 1x, {@docRoot}preview/images/work-profile-screen_2x.png 2x" style="float:right; margin:0 0 10px 20px" width="282" height="476" />
494<li><strong>Rastreamento de uso de dados.</strong> Um perfil ou dono do dispositivo pode agora
495consultar as estatísticas de uso de dados visíveis em <strong>Configurações &gt; Uso de</strong> dados usando os novos métodos
496{@code android.app.usage.NetworkStatsManager}. Os donos de perfis recebem automaticamente
497a permissão para consultar os dados no perfil que gerenciam, enquanto que os donos do dispositivo têm acesso aos dados
498de uso do usuário principal gerenciado.</li>
499<li><strong>Gerenciamento de permissão de tempo de execução:</strong>
500<p>Um perfil ou dono do dispositivo pode definir uma política
501de permissão para todas as solicitações do tempo de execução de todos os aplicativos que usam
502{@code DevicePolicyManager.setPermissionPolicy()}, seja para solicitar ao usuário para conceder
503a permissão como normal ou automaticamente conceder ou negar a permissão silenciosamente. Se a política posterior
504for definida, o usuário não poderá modificar a seleção feita pelo perfil ou dono do dispositivo dentro da tela de permissões
505do aplicativo em <strong>configurações</strong>.</p></li>
506<li><strong>VPN em configurações:</strong> Os aplicativos de VPN agora estão visíveis em
507<strong>Configurações &gt; Mais &gt; VPN</strong>.
508Além disso, as notificações que acompanham o uso de VPN são específicas sobre como essa VPN
509é configurada. Para o dono de um perfil, as notificações são específicas para determinar
510se a VPN é configurada para um perfil gerenciado, um perfil pessoal ou ambos. Para o dono do dispositivo, as notificações
511são específicas para determinar se a VPN é configurada para todo o dispositivo.</li>
512<li><strong>Notificação de estado de trabalho:</strong> Um ícone de pasta da barra de status agora aparece
513sempre que um aplicativo do perfil gerenciado tiver uma atividade no primeiro plano. Além disso, se o usuário é desbloqueado
514diretamente para a atividade de um aplicativo no perfil gerenciado, um aviso é exibido notificando
515ao usuário que ele está dentro do perfil de trabalho.
516</li>
517</ul>
518
519<p class="note">
520  Para obter uma vista detalhada de todas as alterações de API no M Developer Preview, consulte o <a href="{@docRoot}preview/download.html">relatório de diferenças de API</a>.
521</p>
522