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 »</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<uses-permission 116 android:name="android.permission.USE_FINGERPRINT" /> 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 > Segurança > 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 <finger_id> 135</pre> 136<p>No Windows, talvez seja necessário executar {@code telnet 127.0.0.1 <emulator-id>} seguido de 137{@code finger touch <finger_id>}. 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<service android:name=".ChooserTargetService" 186 android:label="@string/service_name" 187 android:permission="android.permission.BIND_CHOOSER_TARGET_SERVICE"> 188 <intent-filter> 189 <action android:name="android.service.chooser.ChooserTargetService" /> 190 </intent-filter> 191</service> 192</pre> 193 194<p>Para cada atividade que quiser expor ao {@code ChooserTargetService}, adicione um elemento 195{@code <meta-data>} com o nome 196{@code "android.service.chooser.chooser_target_service"} no manifesto do aplicativo. 197</p> 198 199<pre> 200<activity android:name=".MyShareActivity” 201 android:label="@string/share_activity_label"> 202 <intent-filter> 203 <action android:name="android.intent.action.SEND" /> 204 </intent-filter> 205<meta-data 206 android:name="android.service.chooser.chooser_target_service" 207 android:value=".ChooserTargetService" /> 208</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 > 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 > Mais > 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