diff options
author | David Friedman <dmail@google.com> | 2015-06-30 01:51:35 +0000 |
---|---|---|
committer | Android (Google) Code Review <android-gerrit@google.com> | 2015-06-30 01:51:37 +0000 |
commit | 9f2e92eebd05d8f37ae5f8383b4a0d63d51a9654 (patch) | |
tree | db128a14d91ffcfcfbe8a828b3e4ad80a13e7f90 /docs/html-intl/intl/pt-br/preview | |
parent | 350286e613cdde99f347bd115c406e790a242f87 (diff) | |
parent | 4fd1a573eb0724251b5c0986c7f0ae7b36d52369 (diff) | |
download | frameworks_base-9f2e92eebd05d8f37ae5f8383b4a0d63d51a9654.zip frameworks_base-9f2e92eebd05d8f37ae5f8383b4a0d63d51a9654.tar.gz frameworks_base-9f2e92eebd05d8f37ae5f8383b4a0d63d51a9654.tar.bz2 |
Merge "Docs: Localized M-Preview pages Bug: 21789313" into mnc-preview-docs
Diffstat (limited to 'docs/html-intl/intl/pt-br/preview')
15 files changed, 2079 insertions, 0 deletions
diff --git a/docs/html-intl/intl/pt-br/preview/api-overview.jd b/docs/html-intl/intl/pt-br/preview/api-overview.jd new file mode 100644 index 0000000..33e8c1f --- /dev/null +++ b/docs/html-intl/intl/pt-br/preview/api-overview.jd @@ -0,0 +1,521 @@ +page.title=Visão geral da API +page.keywords=preview,sdk,compatibility +page.tags=previewresources, androidm +sdk.platform.apiLevel=22-mnc +page.image=images/cards/card-api-overview_16-9_2x.png +@jd:body + + +<div id="qv-wrapper"> +<div id="qv"> + +<h2>Neste documento + <a href="#" onclick="hideNestedItems('#toc44',this);return false;" class="header-toggle"> + <span class="more">mostrar mais</span> + <span class="less" style="display:none">mostrar menos</span></a></h2> + +<ol id="toc44" class="hide-nested"> + <li><a href="#app-linking">Vínculo de aplicativo</a></li> + <li><a href="#backup">Backup automático para aplicativos</a></li> + <li><a href="#authentication">Autenticação</a> + <ol> + <li><a href="#fingerprint-authentication">Autenticação com impressão digital</a></li> + <li><a href="#confirm-credential">Confirmação de credencial</a></li> + </ol> + </li> + <li><a href="#direct-share">Compartilhamento direto</a></li> + <li><a href="#voice-interactions">Interações por voz</a></li> + <li><a href="#assist">Auxiliar API</a></li> + <li><a href="#notifications">Notificações</a></li> + <li><a href="#bluetooth-stylus">Suporte para Bluetooth Stylus</a></li> + <li><a href="#ble-scanning">Digitalização de baixa energia por Bluetooth aprimorada</a></li> + <li><a href="#hotspot">Suporte a Hotspot 2.0 Release 1</a></li> + <li><a href="#4K-display">Modo de exibição 4K</a></li> + <li><a href="#behavior-themeable-colorstatelists">ColorStateLists com tema</a></li> + <li><a href="#audio">Recursos de áudio</a></li> + <li><a href="#video">Recursos de vídeo</a></li> + <li><a href="#camera">Recursos de câmera</a> + <ol> + <li><a href="#flashlight">API da lanterna</a></li> + <li><a href="#reprocessing">Reprocessamento da câmera</a></li> + </ol> + </li> + <li><a href="#afw">Recursos do Android for Work</a></li> +</ol> + +<h2>Diferenças de API</h2> +<ol> +<li><a href="{@docRoot}preview/download.html">API de nível 22 para M Preview »</a> </li> +</ol> + +</div> +</div> + +<p>O M Developer Preview fornece uma visualização avançada no próximo lançamento + para a plataforma Android, oferecendo novos recursos para desenvolvedores e usuários +de aplicativos. Este documento fornece uma introdução às APIs mais notáveis.</p> + +<p>O M Developer Preview foi feito para <strong>novos desenvolvedores +adotantes</strong> e <strong>testadores</strong>. Caso tenha interesse + em influenciar a direção da estrutura do Android, +<a href="{@docRoot}preview/setup-sdk.html">experimente o M Developer + Preview</a> e envie-nos feedback!</p> + +<p class="caution"><strong>Cuidado:</strong> não publique aplicativos +que usam o M Developer Preview na Google Play Store.</p> + +<p class="note"><strong>Observação:</strong> este documento frequentemente +menciona 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 +são formatados em {@code code style} neste documento (sem hyperlinks). Para a +documentaçã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> + +<h3>Alterações importantes de comportamento</h3> + +<p>Caso tenha publicado anteriormente um aplicativo para Android, saiba que ele pode ser afetado +pelas alterações na plataforma.</p> + +<p>Consulte <a href="behavior-changes.html">alterações de comportamento</a> para obter mais informações.</p> + +<h2 id="app-linking">Vínculo de aplicativo</h2> +<p>Esta prévia aprimora o sistema de intenções do Android fornecendo vínculo de aplicativo mais poderoso. +Este recurso permite que você associe um aplicativo com um domínio de web próprio. Com base nesta +associação, a plataforma pode determinar o aplicativo padrão a ser usado para lidar com um link da web +em particular e ignorar a solicitação aos usuários para selecionar um aplicativo. Para aprender como implementar este aplicativo, consulte +<a href="{@docRoot}preview/features/app-linking.html">vínculo de aplicativo</a>. + +<h2 id="backup">Backup automático para aplicativos</h2> +<p>O sistema agora realiza backup automático completo de dados e restauração para aplicativos. Este comportamento +é ativado por padrão para aplicativos com M Preview; não é necessário mais código adicional. Se +os usuários excluírem as contas da Google, os dados de backup também serão excluídos. Para aprender como este recurso +funciona e como configurar o backup no sistema do arquivo, consulte +<a href="{@docRoot}preview/backup/index.html">backup automático para aplicativos</a>.</p> + +<h2 id="authentication">Autenticação</h2> +<p>Esta prévia oferece novas APIs para permitir que você autentique os usuários usando digitalizadores de impressão digital em dispositivos +suportados e verifique o quão recentemente os usuários autenticaram pela última vez usando o +mecanismo de desbloqueio por dispositivo (como senha de tela de bloqueio). Use essas APIs em conjunto com +o <a href="{@docRoot}training/articles/keystore.html">sistema Android Keystore</a>.</p> + +<h3 id="fingerprint-authentication">Autenticação com impressão digital</h3> + +<p>Para autenticar os usuários por meio de digitalização de impressão digital, adquira uma instância da nova classe +{@code android.hardware.fingerprint.FingerprintManager} e chame o método +{@code FingerprintManager.authenticate()}. O aplicativo deve ser executado em um dispositivo +compatível com sensor de impressão digital. Deve-se implementar a interface do usuário para o fluxo de autenticação +de impressão digital no aplicativo e usar o ícone de impressão digital padrão do Android na IU. +O ícone de impressão digital do Android ({@code c_fp_40px.png}) é incluído no +<a href="https://github.com/googlesamples/android-FingerprintDialog" class="external-link">aplicativo de exemplo</a>. Caso esteja desenvolvendo vários aplicativos que usam +autenticação de impressão digital, observe que cada aplicativo deve autenticar a impressão digital do usuário independentemente. +</p> + +<p>Para usar este recurso no aplicativo, adicione primeiro a permissão {@code USE_FINGERPRINT} no +manifesto.</p> + +<pre> +<uses-permission + android:name="android.permission.USE_FINGERPRINT" /> +</pre> + +<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" /> + +<p>Para ver a implementação do aplicativo da autenticação com impressão digital, consulte o +<a href="https://github.com/googlesamples/android-FingerprintDialog" class="external-link"> + exemplo de caixa de diálogo de impressão digital</a>.</p> + +<p>Caso esteja testando este recurso, siga estas etapas:</p> +<ol> +<li>Instale o Android SDK Tools Revision 24.3, caso ainda não tenha instalado.</li> +<li>Registre uma nova impressão digital no emulador acessando +<strong>Configurações > Segurança > Impressão digital</strong> e, em seguida, siga as instruções de registro.</li> +<li>Use um emulador para emular eventos de toque de dedo com o +comando a seguir. Use o mesmo comando para emular os eventos de toque de impressão digital na tela de +bloqueio ou no aplicativo. +<pre class="no-prettyprint"> +adb -e emu finger touch <finger_id> +</pre> +<p>No Windows, talvez seja necessário executar {@code telnet 127.0.0.1 <emulator-id>} seguido de +{@code finger touch <finger_id>}. +</p> +</li> +</ol> + +<h3 id="confirm-credential">Confirmação de credencial</h3> +<p>O aplicativo pode autenticar os usuários com base no quão recentemente o dispositivo foi desbloqueado pela última vez. Este +recurso libera o usuário de ter que lembrar de senhas específicas de aplicativo extras e evita +a necessidade de implementar a própria interface do usuário de autenticação. O aplicativo deve usar este recurso +em conjunto com uma implementação de chave secreta ou pública para a implementação de usuário.</p> + +<p>Para definir uma duração de tempo limite em que a mesma chave pode ser usada novamente +após o usuário autenticar, chame o novo método +{@code android.security.keystore.KeyGenParameterSpec.setUserAuthenticationValidityDurationSeconds()} + ao definir um {@link javax.crypto.KeyGenerator} ou +{@link java.security.KeyPairGenerator}. Este recurso funciona para operações criptográficas +simétricas.</p> + +<p>Evite exibir o diálogo de nova autenticação excessivamente — os aplicativos devem tentar +usar o objeto criptográfico primeiro e, se o tempo limite expirar, usar o método +{@link android.app.KeyguardManager#createConfirmDeviceCredentialIntent(java.lang.CharSequence, java.lang.CharSequence) createConfirmDeviceCredentialIntent()} + para autenticar novamente o usuário dentro do aplicativo. +</p> + +<p>Para ver uma implementação de aplicativo deste recurso, consulte o +<a href="https://github.com/googlesamples/android-ConfirmCredential" class="external-link"> +exemplo de confirmação de credencial</a>.</p> + +<h2 id="direct-share">Compartilhamento direto</h2> + +<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" /> + +<p>Esta prévia fornece as APIs para tornar o compartilhamento intuitivo e rápido para os usuários. É possível +definir os <em>alvos de compartilhamento direto</em> que iniciam uma atividade específica no aplicativo. +Esses alvos de compartilhamento direto são expostos aos usuários por meio do menu <em>Compartilhar</em>. Este recurso permite que os usuários +compartilhem conteúdos aos alvos, como contatos, dentro de outros aplicativos. Por exemplo: o alvo de compartilhamento direto +pode iniciar uma atividade em outro aplicativo de rede social, o que permite que o usuário compartilhe o conteúdo diretamente +para um amigo ou comunidade específica neste aplicativo.</p> + +<p>Para ativar os alvos de compartilhamento direto, deve-se definir uma classe que estende a classe +{@code android.service.} <br> +{@code chooser.ChooserTargetService}. Declare o +{@code ChooserTargetService} no manifesto. Dentro desta declaração, especifique a permissão +{@code BIND_CHOOSER_TARGET_SERVICE} e um filtro de intenções na ação +{@code SERVICE_INTERFACE}.</p> +<p>O seguinte exemplo mostra como se deve declarar o {@code ChooserTargetService} no +manifesto.</p> +<pre> +<service android:name=".ChooserTargetService" + android:label="@string/service_name" + android:permission="android.permission.BIND_CHOOSER_TARGET_SERVICE"> + <intent-filter> + <action android:name="android.service.chooser.ChooserTargetService" /> + </intent-filter> +</service> +</pre> + +<p>Para cada atividade que quiser expor ao {@code ChooserTargetService}, adicione um elemento +{@code <meta-data>} com o nome +{@code "android.service.chooser.chooser_target_service"} no manifesto do aplicativo. +</p> + +<pre> +<activity android:name=".MyShareActivity” + android:label="@string/share_activity_label"> + <intent-filter> + <action android:name="android.intent.action.SEND" /> + </intent-filter> +<meta-data + android:name="android.service.chooser.chooser_target_service" + android:value=".ChooserTargetService" /> +</activity> +</pre> + +<h2 id="voice-interactions">Interações por voz</h2> +<p> +Esta prévia fornece uma API de interação por voz que, junto com +<a href="https://developers.google.com/voice-actions/" class="external-link">ações de voz</a> +, permite a criação de experiências por voz nos aplicativos. Chame o método +{@code android.app.Activity.isVoiceInteraction()} para determinar se a atividade +foi iniciada em resposta à ação de voz. Caso tenha sido iniciada, o aplicativo pode usar a classe +{@code android.app.VoiceInteractor} para solicitar uma confirmação de voz do usuário, +selecionar a partir de uma lista de opções e muito mais. Para aprender mais sobre a implementação de ações de voz, consulte +<a href="https://developers.google.com/voice-actions/interaction/" class="external-link">o site de desenvolvedor de ações de voz</a>. +</p> + +<h2 id="assist">Auxiliar API</h2> +<p> +Esta prévia oferece uma nova maneira de usuários se envolverem com os aplicativos com um assistente. Para usar este +recurso, o usuário deve possibilitar que o assistente use o contexto atual. Quando ativado, +o usuário pode invocar um assistente dentro de qualquer aplicativo mantendo o botão <strong>Iniciar</strong> pressionado.</p> +<p>O aplicativo pode optar por não compartilhar o contexto atual com o assistente configurando o sinalizador +{@link android.view.WindowManager.LayoutParams#FLAG_SECURE}. Além do conjunto +padrão de informações que a plataforma passa ao assistente, o aplicativo pode compartilhar +informações adicionais usando a nova classe {@code android.app.Activity.AssistContent}.</p> + +<p>Para fornecer ao assistente contexto adicional do aplicativo, siga estas etapas:</p> + +<ol> +<li>Implemente a interface {@link android.app.Application.OnProvideAssistDataListener}.</li> +<li>Registre esta escuta usando +{@link android.app.Application#registerOnProvideAssistDataListener(android.app.Application.OnProvideAssistDataListener) registerOnProvideAssistDataListener()}.</li> +<li>Para fornecer informações contextuais específicas da atividade, substitua o retorno de chamada +{@link android.app.Activity#onProvideAssistData(android.os.Bundle) onProvideAssistData()} + e, opcionalmente, o novo retorno de chamada {@code Activity.onProvideAssistContent()}. +</ol> + +<h2 id="notifications">Notificações</h2> +<p>Esta prévia adiciona as seguintes alterações de API às notificações:</p> +<ul> + <li>Novo nível de filtro {@code NotificationListenerService.INTERRUPTION_FILTER_ALARMS} que corresponde +ao modo "não perturbe" de <em>despertadores apenas</em>.</li> + <li>Novo valor da categoria {@code Notification.CATEGORY_REMINDER} que é usado para distinguir +lembretes de agendamentos do usuário de outros eventos ( +{@link android.app.Notification#CATEGORY_EVENT}) e despertadores ( +{@link android.app.Notification#CATEGORY_ALARM}).</li> + <li>Nova classe {@code android.graphics.drawable.Icon} que pode ser anexada às notificações +por meio dos métodos {@code Notification.Builder.setSmallIcon(Icon)} e +{@code Notification.Builder.setLargeIcon(Icon)}.</li> + <li>Novo método {@code NotificationManager.getActiveNotifications()} que permite que os aplicativos +descubram quais das notificações ainda estão ativas. Para ver uma implementação de aplicativo que usa este recurso, +consulte o <a href="https://github.com/googlesamples/android-ActiveNotifications" class="external-link">exemplo de notificações ativas</a>.</li> +</ul> + +<h2 id="bluetooth-stylus">Suporte para Bluetooth Stylus</h2> +<p>Esta prévia fornece um suporte aprimorado para a entrada de usuário usando um Bluetooth Stylus. Os usuários podem +parear e conectar um Bluetooth Stylus compatível com o telefone ou tablet. Quando conectado, as informações +de posição da tela tátil são fundidas com as informações de botão e pressão do Stylus +para fornecer um alcance maior de expressão em comparação à tela tátil sozinha. O aplicativo pode escutar o pressionar +de botões do Stylus e realizar ações secundárias registrando os novos retornos de chamada +{@code View.onStylusButtonPressListener} e {@code GestureDetector.OnStylusButtonPressListener} + na atividade.</p> + +<p>Use as constantes e os métodos {@link android.view.MotionEvent} para detectar as interações +de botão do Stylus:</p> +<ul> +<li>Se o usuário toca no Stylus com um botão na tela do aplicativo, o método +{@link android.view.MotionEvent#getToolType(int) getTooltype()} retorna +{@link android.view.MotionEvent#TOOL_TYPE_STYLUS}.</li> +<li>Para aplicativos com M Preview, o método +{@link android.view.MotionEvent#getButtonState() getButtonState()} + retorna {@code MotionEvent.STYLUS_BUTTON_PRIMARY} quando o usuário +pressiona o botão principal do Stylus. Se o Stylus tiver um segundo botão, o mesmo método retorna +{@code MotionEvent.STYLUS_BUTTON_SECONDARY} quando o usuário o pressiona. Se o usuário pressiona +os dois botões simultaneamente, o método retorna os valores com OR juntos ( +{@code STYLUS_BUTTON_PRIMARY|STYLUS_BUTTON_SECONDARY}).</li> +<li> +Para aplicativos com uma versão de plataforma inferior , o método +{@link android.view.MotionEvent#getButtonState() getButtonState()} retorna +{@link android.view.MotionEvent#BUTTON_SECONDARY} (para o pressionar do botão principal do Stylus), +{@link android.view.MotionEvent#BUTTON_TERTIARY} (para o pressionar do botão secundário do Stylus) ou ambos. +</li> +</ul> + +<h2 id="ble-scanning">Digitalização de baixa energia por Bluetooth aprimorada</h2> +<p> +Se o aplicativo realizar digitalizações de baixa energia por Bluetooth, é possível usar o novo método +{@code android.bluetooth.le.ScanSettings.Builder.setCallbackType()} para especificar +que você quer que os retornos de chamada sejam notificados apenas quando um pacote de propaganda correspondente ao conjunto +{@link android.bluetooth.le.ScanFilter} for encontrado primeiro e quando +ele não for visto por um período. Esta abordagem de digitalização é mais eficiente +do que a fornecida na versão anterior da plataforma. +</p> + +<h2 id="hotspot">Suporte a Hotspot 2.0 Release 1</h2> +<p> +Esta prévia adiciona suporte ao Hotspot 2.0 Release 1 nos dispositivos Nexus 6 e Nexus 9. Para fornecer +as credenciais de Hotspot 2.0 no aplicativo, use os novos métodos da classe +{@link android.net.wifi.WifiEnterpriseConfig}, como {@code setPlmn()} e +{@code setRealm()}. No objeto {@link android.net.wifi.WifiConfiguration}, é possível definir os campos +{@link android.net.wifi.WifiConfiguration#FQDN} e {@code providerFriendlyName}. +A nova propriedade {@code ScanResult.PasspointNetwork} indica se uma rede detectada representa +um ponto de acesso Hotspot 2.0. +</p> + +<h2 id="4K-display">Modo de exibição 4K</h2> +<p>A plataforma agora permite que aplicativos solicitem que a resolução seja aprimorada para renderização 4K +em hardware compatível. Para consultar a resolução física atual, use as novas APIs +{@code android.view.Display.Mode}. Se a IU for desenhada em uma resolução lógica +menor e for redimensionada para uma resolução física maior, saiba que a resolução física que o método +{@code Display.Mode.getPhysicalWidth()} retorna pode ser diferente da resolução +física informada por {@link android.view.Display#getSize(android.graphics.Point) getSize()}.</p> + +<p>É possível solicitar que o sistema altere a resolução física no aplicativo à medida que ele é executado configurando +a propriedade {@code WindowManager.LayoutParams.preferredDisplayModeId} da janela do aplicativo. Este +recurso é útil se quiser alternar para a resolução de exibição 4K. Enquanto estiver no modo de exibição 4K, +a IU continua a ser renderizada na resolução original (como 1080 p) e é escalonada para 4K, mas os objetos +{@link android.view.SurfaceView} podem exibir o conteúdo na resolução nativa.</p> + +<h2 id="behavior-themeable-colorstatelists">ColorStateLists com tema</h2> +<p>Os atributos de tema agora são suportados no +{@link android.content.res.ColorStateList} para dispositivos que executam o M Preview. Os métodos +{@link android.content.res.Resources#getColorStateList(int) getColorStateList()} e +{@link android.content.res.Resources#getColor(int) getColor()} ficaram obsoletos. Caso esteja chamando +essas APIs, chame os novos métodos {@code Context.getColorStateList()} ou +{@code Context.getColor()}. Esses métodos também estão disponíveis na biblioteca +v4 appcompat via {@link android.support.v4.content.ContextCompat}.</p> + +<h2 id="audio">Recursos de áudio</h2> + +<p>Esta prévia adiciona aprimoramentos ao processamento de áudio no Android, incluindo: </p> +<ul> + <li>Suporte para protocolo <a href="http://en.wikipedia.org/wiki/MIDI" class="external-link">MIDI</a> +, com as novas APIs {@code android.media.midi}. Use essas APIs para enviar e receber eventos +de MIDI.</li> + <li>Use as novas classes {@code android.media.AudioRecord.Builder} e {@code android.media.AudioTrack.Builder} + para criar captura de áudio digital e objetos de reprodução, respectivamente, +e configure a fonte de áudio e as propriedades do coletor para substituir os padrões do sistema.</li> + <li>Ganchos de API para associação de dispositivos de entrada e áudio. Isto é particularmente útil se o aplicativo +permite que os usuários iniciem uma pesquisa de voz a partir de um controle de jogo ou controle remoto para Android +TV. O sistema invoca o novo retorno de chamada {@code android.app.Activity.onSearchRequested()} quando +o usuário inicia uma pesquisa. Para determinar se o dispositivo de entrada do usuário tem um microfone integrado, recupere +o objeto {@link android.view.InputDevice} deste retorno de chamada e, em seguida, chame o novo método +{@code InputDevice.hasMic()}.</li> + <li>Novas classes {@code android.media.AudioDevicesManager} que permitem que você +recupere uma lista completa de todas as fontes e dispositivos de áudio do coletor anexados. Também é possível especificar um objeto +{@code android.media.OnAudioDeviceConnectionListener} caso queira que o aplicativo seja notificado +quando um dispositivo de áudio for conectado ou desconectado.</li> +</ul> + +<h2 id="video">Recursos de vídeo</h2> +<p>Esta prévia adiciona novas capacidades às APIs de processamento de vídeo, incluindo:</p> +<ul> +<li>A nova classe {@code android.media.MediaSync} que ajuda os aplicativos a renderizar transmissões +de vídeo e áudio sincronizadamente. Os buffers de áudio são enviados sem bloqueio e retornados +por um retorno de chamada. Eles também suportam taxa de reprodução dinâmica. +</li> +<li>O novo evento {@code MediaDrm.EVENT_SESSION_RECLAIMED}, que indica que uma sessão aberta pelo aplicativo +foi recuperada pelo gerenciador de recursos. Se o aplicativo usa sessões de DRM, deve-se +lidar com este evento e garantir que uma sessão recuperada não seja usada. +</li> +<li>O novo código de erro {@code MediaCodec.CodecException.ERROR_RECLAIMED}, que indica que o gerenciador +de recurso recuperou o recurso de mídia usado pelo codec. Com esta exceção, o codec +deve ser liberado, como se fosse movido para o estado terminal. +</li> +<li>A nova interface {@code MediaCodecInfo.CodecCapabilities.getMaxSupportedInstances()} para obter +uma dica do número máximo suportado de instâncias de codec concorrentes. +</li> +<li>O novo método {@code MediaPlayer.setPlaybackParams()} para definir a taxa de reprodução de mídia +para reprodução de movimento lento ou rápido. Ele também estica ou acelera a reprodução de áudio automaticamente +em conjunto com o vídeo.</li> +</ul> + +<h2 id="camera">Recursos de câmera</h2> +<p>Esta prévia inclui as seguintes novas APIs para acessar a lanterna da câmera +e para o reprocessamento da câmera de imagens:</p> + +<h3 id="flashlight">API da lanterna</h3> +<p>Se um dispositivo de câmera tem uma unidade de flash, é possível chamar o método {@code CameraManager.setTorchMode()} +para ligar ou desligar o modo de tocha da unidade de flash sem abrir o dispositivo da câmera. O aplicativo +não tem propriedade exclusiva da unidade de flash ou do dispositivo de câmera. O modo de tocha é desativado +e torna-se indisponível sempre que o dispositivo de câmera estiver indisponível ou quando outros +recursos de câmera que mantêm a tocha ativada ficam indisponíveis. Outros aplicativos também podem chamar {@code setTorchMode()} +para desativar o modo de tocha. Quando o aplicativo que ativou o modo +de tocha for fechado, o modo é desativado.</p> + +<p>É possível registrar um retorno de chamada para ser notificado sobre o estado da tocha chamando o método +{@code CameraManager.registerTorchCallback()}. Na primeira vez que o retorno de chamada é registrado, +ele é imediatamente chamado com o estado do modo de tocha de todos os dispositivos de câmera conhecidos com +uma unidade de flash. Se o modo de tocha é ativado ou desativado, o método +{@code CameraManager.TorchCallback.onTorchModeChanged()} é invocado.</p> + +<h3 id="reprocessing">API de reprocessamento</h3> +<p>A API {@link android.hardware.camera2 Camera2} é estendida para suportar YUV e reprocessamento +de imagem de formato opaco privado. O aplicativo determina se as capacidades de reprocessamento estão disponíveis +via {@code CameraCharacteristics.REQUEST_AVAILABLE_CAPABILITIES}. Se um dispositivo suporta o reprocessamento, +é possível criar uma sessão de captura de câmera de reprocessamento chamando +{@code CameraDevice.createReprocessableCaptureSession()} e criando solicitações para o reprocessamento +do buffer de entrada.</p> + +<p>Use a classe {@code ImageWriter} para conectar o fluxo de buffer de entrada à entrada de reprocessamento +da câmera. Para obter um buffer vazio, siga este modelo de programação:</p> + +<ol> +<li>Chame o método {@code ImageWriter.dequeueInputImage()}.</li> +<li>Preencha os dados no buffer de entrada.</li> +<li>Envie o buffer à câmera chamando o método {@code ImageWriter.queueInputImage()}.</li> +</ol> + +<p>Caso esteja usando um objeto {@code ImageWriter} junto com uma imagem +{@code android.graphics.ImageFormat.PRIVATE}, o aplicativo não poderá acessar os dados +da imagem diretamente. Em vez disso, passe a imagem {@code ImageFormat.PRIVATE} diretamente ao +{@code ImageWriter} chamando o método {@code ImageWriter.queueInputImage()} sem nenhuma +cópia de buffer.</p> + +<p>A classe {@code ImageReader} agora suporta as transmissões de imagem +de formato {@code android.graphics.ImageFormat.PRIVATE}. Este suporte permite que o aplicativo mantenha uma fila de imagem circular de imagens de saída +{@code ImageReader}, selecione uma ou mais imagens e envie-as para +{@code ImageWriter} para o reprocessamento de câmera.</p> + +<h2 id="afw">Recursos do Android for Work</h2> +<p>Esta prévia inclui as seguintes novas APIs para Android for Work:</p> +<ul> + <li><strong>Controles aprimorados para dispositivos de uso único e pertencentes a empresas:</strong> O dono do dispositivo +pode controlar as seguintes configurações para aprimorar +os dispositivos de uso único pertencentes a empresas (COSU): + <ul> + <li>Desativar ou reativar a proteção de bloqueio com o método +{@code DevicePolicyManager.setKeyguardEnabledState()}.</li> + <li>Desativar ou reativar a barra de status (incluindo configurações rápidas, +notificações e o gesto de arrastar para cima que inicia o Google Now) com o método +{@code DevicePolicyManager.setStatusBarEnabledState()}.</li> + <li>Desativar ou reativar inicialização segura com a constante {@link android.os.UserManager} +{@code DISALLOW_SAFE_BOOT}.</li> + <li>Evitar que a tela desligue quando conectada com a constante +{@link android.provider.Settings.Global} {@code STAY_ON_WHILE_PLUGGED_IN}.</li> + </ul> + </li> + <li><strong>Instalação e desinstalação silenciosa de aplicativos pelo dono do dispositivo:</strong> O dono do dispositivo pode agora +instalar e desinstalar aplicativos silenciosamente usando as APIs {@link android.content.pm.PackageInstaller}, +independente do Google Play for Work. É possível tomar providências para os dispositivos +por 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 +de telefones públicos ou de outros dispositivos sem a ativação da conta Google.</li> +<li><strong>Acesso silencioso de certificado empresarial: </strong> Quando um aplicativo chama +{@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()} +, antes do usuário receber a solicitação para selecionar um certificado, o perfil ou dono do dispositivo +pode chamar o método {@code DeviceAdminReceiver.onChoosePrivateKeyAlias()} para fornecer +o alias silenciosamente ao aplicativo da solicitação. Este recurso permite que você forneça acesso de aplicativos gerenciados para certificados +sem a interação de usuário.</li> +<li><strong>Aceitação automática de atualizações do sistema.</strong> Ao configurar a política de atualização do sistema com +{@code DevicePolicyManager.setSystemUpdatePolicy()}, o dono do dispositivo pode aceitar automaticamente a atualização +do sistema, no caso de um dispositivo público, ou adiar a atualização e evitar +que ela seja feita pelo usuário por até 30 dias. Além disso, um administrador pode definir uma janela de tempo diária +em que uma atualização deve ser realizada. Por exemplo: durante os momentos em que um dispositivo público não está em uso. Quando +uma 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 +do sistema e, portanto, comporta-se de acordo com a definição. +</li> +<li> +<strong>Instalação de certificado delegado:</strong> Um perfil ou dono do dispositivo pode agora fornecer ao aplicativo +de terceiros a habilidade de chamar essas APIs de gerenciamento +de certificado de {@link android.app.admin.DevicePolicyManager}: +<ul> + <li>{@link android.app.admin.DevicePolicyManager#getInstalledCaCerts(android.content.ComponentName) +getInstalledCaCerts()}</li> + <li>{@link android.app.admin.DevicePolicyManager#hasCaCertInstalled(android.content.ComponentName,byte[]) +hasCaCertInstalled()}</li> + <li>{@link android.app.admin.DevicePolicyManager#installCaCert(android.content.ComponentName,byte[]) +installCaCert()}</li> + <li>{@link android.app.admin.DevicePolicyManager#uninstallCaCert(android.content.ComponentName,byte[]) +uninstallCaCert()}</li> + <li>{@link android.app.admin.DevicePolicyManager#uninstallAllUserCaCerts(android.content.ComponentName) +uninstallAllUserCaCerts()}</li> + <li>{@link android.app.admin.DevicePolicyManager#installKeyPair(android.content.ComponentName,java.security.PrivateKey,java.security.cert.Certificate,java.lang.String) +installKeyPair()}</li> +</ul> +</li> +<li><strong>Proteção de redefinição de fábrica da empresa:</strong> Ao preparar um dono do dispositivo, agora é possível +configurar parâmetros para desbloquear a proteção de redefinição de fábrica (FRP) configurando o pacote +{@code DeviceManagerPolicy.EXTRA_PROVISIONING_RESET_PROTECTION_PARAMETERS}. Um aplicativo de programador +NFC pode fornecer estes parâmetros depois que um dispositivo for redefinido para desbloquear o FRP e preparar o dispositivo, +sem a necessidade da conta Google anteriormente configurada. Caso não modifique esses parâmetros, +o FRP permanece no local e evita que o dispositivo seja ativado sem as credenciais +Google anteriormente ativadas. +<p>Além disso, ao configurar as restrições do aplicativo nos serviços Google, o dono do dispositivo pode especificar contas +Google alternativas para desbloquear o FRP para substituir as contas ativadas no dispositivo.</p> +</li> +<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" /> +<li><strong>Rastreamento de uso de dados.</strong> Um perfil ou dono do dispositivo pode agora +consultar as estatísticas de uso de dados visíveis em <strong>Configurações > Uso de</strong> dados usando os novos métodos +{@code android.app.usage.NetworkStatsManager}. Os donos de perfis recebem automaticamente +a permissão para consultar os dados no perfil que gerenciam, enquanto que os donos do dispositivo têm acesso aos dados +de uso do usuário principal gerenciado.</li> +<li><strong>Gerenciamento de permissão de tempo de execução:</strong> +<p>Um perfil ou dono do dispositivo pode definir uma política +de permissão para todas as solicitações do tempo de execução de todos os aplicativos que usam +{@code DevicePolicyManager.setPermissionPolicy()}, seja para solicitar ao usuário para conceder +a permissão como normal ou automaticamente conceder ou negar a permissão silenciosamente. Se a política posterior +for definida, o usuário não poderá modificar a seleção feita pelo perfil ou dono do dispositivo dentro da tela de permissões +do aplicativo em <strong>configurações</strong>.</p></li> +<li><strong>VPN em configurações:</strong> Os aplicativos de VPN agora estão visíveis em +<strong>Configurações > Mais > VPN</strong>. +Além disso, as notificações que acompanham o uso de VPN são específicas sobre como essa VPN +é configurada. Para o dono de um perfil, as notificações são específicas para determinar +se a VPN é configurada para um perfil gerenciado, um perfil pessoal ou ambos. Para o dono do dispositivo, as notificações +são específicas para determinar se a VPN é configurada para todo o dispositivo.</li> +<li><strong>Notificação de estado de trabalho:</strong> Um ícone de pasta da barra de status agora aparece +sempre que um aplicativo do perfil gerenciado tiver uma atividade no primeiro plano. Além disso, se o usuário é desbloqueado +diretamente para a atividade de um aplicativo no perfil gerenciado, um aviso é exibido notificando +ao usuário que ele está dentro do perfil de trabalho. +</li> +</ul> + +<p class="note"> + 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>. +</p> diff --git a/docs/html-intl/intl/pt-br/preview/behavior-changes.jd b/docs/html-intl/intl/pt-br/preview/behavior-changes.jd new file mode 100644 index 0000000..cd99bbd --- /dev/null +++ b/docs/html-intl/intl/pt-br/preview/behavior-changes.jd @@ -0,0 +1,402 @@ +page.title=Mudanças de comportamento +page.keywords=preview,sdk,compatibility +sdk.platform.apiLevel=MNC +@jd:body + +<div id="qv-wrapper"> +<div id="qv"> + +<h2>Neste documento</h2> + +<ol id="toc44" class="hide-nested"> + <li><a href="#behavior-runtime-permissions">Permissões do tempo de execução</a></li> + <li><a href="#behavior-power">Otimizações de economia de energia</a> + <ol> + <li><a href="#behavior-doze">Soneca</a></li> + <li><a href="#behavior-app-standby">Aplicativo em espera</a></li> + </ol> + </li> + <li><a href="#behavior-adoptable-storage">Dispositivos de armazenamento adotáveis</a></li> + <li><a href="#behavior-apache-http-client">Remoção do cliente Apache HTTP</a></li> + <li><a href="#behavior-audiomanager-Changes">Mudanças no AudioManager</a></li> + <li><a href="#behavior-test-selection">Seleção de texto</a></li> + <li><a href="#behavior-keystore">Mudanças no Android Keystore</a></li> + <li><a href="#behavior-network">Mudanças de rede e Wi-Fi</a></li> + <li><a href="#behavior-camera">Mudanças no serviço de câmera</a></li> + <li><a href="#behavior-art-runtime">Tempo de execução de ART</a></li> + <li><a href="#behavior-apk-validation">Validação de APK</a></li> + <li><a href="#behavior-afw">Mudanças do Android for Work</a></li> +</ol> + +<h2>Diferenças de API</h2> +<ol> +<li><a href="{@docRoot}preview/download.html">API de nível 22 para M Preview »</a> </li> +</ol> + + +<h2>Veja também</h2> +<ol> +<li><a href="{@docRoot}preview/api-overview.html">Visão geral da API do M Developer Preview</a> </li> +</ol> + +</div> +</div> + +<p>Junto com novas capacidades e recursos, o M Developer Preview inclui uma variedade +de mudanças do sistema e alterações no comportamento da API. Este documento destaca algumas +das alterações principais que você deve entender e levar em consideração nos aplicativos.</p> + +<p>Caso tenha publicado anteriormente um aplicativo para Android, saiba que ele pode ser afetado + pelas alterações na plataforma.</p> + +<h2 id="behavior-runtime-permissions">Permissões do tempo de execução</h1> +<p>Esta prévia introduz um novo modelo de permissões em que os usuários podem gerenciar diretamente + as permissões do aplicativo no tempo de execução. Este modelo fornece aos usuários uma visibilidade aprimorada e controle sobre permissões, + ao mesmo tempo em que agiliza os processos de atualização automática e instalação para os desenvolvedores de aplicativos. +Os usuários podem conceder ou revogar as permissões individualmente para os aplicativos instalados. </p> + +<p>Nos aplicativos direcionados para o M Preview, certifique-se de verificar e solicitar as permissões + no tempo de execução. Para determinar se o aplicativo recebeu uma permissão, chame + o novo método {@code Context.checkSelfPermission()}. Para solicitar uma permissão, chame o novo método + {@code Activity.requestPermission()}. Mesmo se o aplicativo não é direcionado para o M, + deve-se testá-lo sob o novo modelo de permissões.</p> + +<p>Para obter mais detalhes sobre o suporte do novo modelo de permissões no aplicativo, consulte a página de prévia de desenvolvedor +<a href="{@docRoot}preview/features/runtime-permissions.html"> +Permissões</a>. Para obter dicas sobre como avaliar o impacto no aplicativo, + consulte o <a href="{@docRoot}preview/testing/guide.html#runtime-permissions">guia de teste</a>.</p> + +<h2 id="behavior-power">Otimizações de economia de energia</h2> +<p>Esta prévia introduz novas otimizações de economia de energia para dispositivos e aplicativos ociosos.</p> + +<h3 id="behavior-doze">Soneca</h3> +<p>Se o dispositivo estiver desconectado e parado com a tela desligada por um período, + o modo <em>Soneca</em> será ativado, onde ele tentará manter o sistema em um estado ocioso. Neste modo, + os dispositivos retomam as operações normais periodicamente por breves períodos para que a sincronização de aplicativos + possa ocorrer e para que o sistema possa realizar quaisquer operações pendentes.</p> + +<p>As seguintes restrições se aplicam aos aplicativos durante a Soneca:</p> +<ul> +<li>O acesso à rede é desativado, a não ser que o aplicativo receba um convite de alta prioridade + do Google Cloud Messaging.</li> +<li><a href="{@docRoot}reference/android/os/PowerManager.WakeLock.html">Bloqueios de soneca</a> são ignorados.</li> +<li>Os despertadores agendados com a classe {@link android.app.AlarmManager} são ignorados, + exceto os alarmes definidos com o método {@link android.app.AlarmManager#setAlarmClock setAlarmClock()} + e {@code AlarmManager.setAndAllowWhileIdle()}.</li> +<li>As verificações de Wi-Fi não são realizadas.</li> +<li>Sincronizações e trabalhos para os adaptadores de sincronização e {@link android.app.job.JobScheduler} + não têm permissão para serem executados.</li> +</ul> +</p> +<p>Quando o dispositivo sair do modo soneca, quaisquer sincronizações e trabalhos pendentes são executados.</p> +<p>É possível testar este recurso conectando o dispositivo executando o M Preview + à máquina de desenvolvimento e chamando os seguintes comandos: +</p> +<pre class="no-prettyprint"> +$ adb shell dumpsys battery unplug +$ adb shell dumpsys deviceidle step +$ adb shell dumpsys deviceidle -h +</pre> +<p class="note"><strong>Observação</strong>: o próximo lançamento do +<a href="https://developers.google.com/cloud-messaging/" class="external-link"> +Google Cloud Messaging</a> permite que você designe + mensagens de alta prioridade. Se o aplicativo recebe mensagens de alta prioridade do GCM, + um acesso breve à rede é concedido mesmo quando o dispositivo está no modo soneca. +</p> + +<p>Consulte o +<a href="{@docRoot}preview/testing/guide.html#doze-standby">guia de teste</a> para obter dicas sobre +como testar a soneca nos aplicativos. </p> + +<h3 id="behavior-app-standby">Aplicativo em espera</h3> +<p>Com esta prévia, o sistema pode determinar quais aplicativos estão em espera quando +não estão em uso ativo. O aplicativo é considerado em espera após um período, a não ser que o sistema detecte +algum destes sinais:</p> + +<ul> +<li>O aplicativo foi explicitamente iniciado pelo usuário.</li> +<li>O aplicativo tem um processo atualmente em primeiro plano (seja uma atividade ou serviço de primeiro plano + ou esteja em uso por outra atividade ou serviço de primeiro plano).</li> +<li>O aplicativo gera uma notificação que o usuário vê na tela de bloqueio + ou na bandeja de notificações.</li> +<li>O usuário explicitamente pede para que o aplicativo seja liberado das otimizações, + ajustado em <strong>Settings (Configurações)</strong>.</li> +</ul> + +<p>Se o dispositivo estiver desconectado, o aplicativo considerado ocioso terá o acesso +à rede desativado e as sincronizações e os trabalhos suspensos. Quando o dispositivo está conectado em uma fonte de alimentação, + esses aplicativos têm acesso à rede permitido e podem executar quaisquer sincronizações e trabalhos pendentes. Se o dispositivo permanece ocioso por longos períodos, + os aplicativos ociosos têm acesso à rede permitido aproximadamente uma vez por dia.</p> + +<p>É possível testar este recurso conectando o dispositivo executando o M Preview + à máquina de desenvolvimento e chamando os seguintes comandos: +</p> +<pre class="no-prettyprint"> +$ adb shell dumpsys battery unplug +$ adb shell am set-idle <packageName> true +$ adb shell am set-idle <packageName> false +$ adb shell am get-idle <packageName> +</pre> + +<p class="note"><strong>Observação</strong>: o próximo lançamento do +<a href="https://developers.google.com/cloud-messaging/" class="external-link"> +Google Cloud Messaging</a> (GCM) permite que você +designe mensagens de alta prioridade. Se o aplicativo recebe mensagens de alta prioridade do GCM, +um acesso breve à rede é concedido mesmo quando o aplicativo está ocioso. +</p> + +<p>Consulte o +<a href="{@docRoot}preview/testing/guide.html#doze-standby">guia de teste</a> para obter dicas sobre como +testar a espera dos aplicativos. </p> + +<h2 id="behavior-adoptable-storage">Dispositivos de armazenamento adotáveis</h2> +<p> +Com esta prévia, os usuários podem <em>adotar</em> dispositivos de armazenamento externo como cartões SD. Adotar um dispositivo +de armazenamento externo criptografa e formata o dispositivo para agir como um armazenamento interno. Este recurso +permite que os usuários movam aplicativos e dados privados desses aplicativos entre dispositivos de armazenamento. Ao mover aplicativos, +o sistema respeita a preferência +<a href="{@docRoot}guide/topics/manifest/manifest-element.html#install">{@code android:installLocation}</a> +no manifesto.</p> + +<p>Se o aplicativo acessar as seguintes APIs ou campos, saiba que os caminhos de arquivos retornados +serão alterados dinamicamente quando o aplicativo for movido entre os dispositivos de armazenamento externo e interno. +Ao compilar caminhos de arquivos, é recomendado que essas APIs sempre sejam chamadas dinamicamente. +Não use caminhos de arquivo criptografados nem persista em caminhos de arquivo completamente qualificados que foram compilados anteriormente.</p> + +<ul> +<li>Métodos {@link android.content.Context}: + <ul> + <li>{@link android.content.Context#getFilesDir() getFilesDir()}</li> + <li>{@link android.content.Context#getCacheDir() getCacheDir()}</li> + <li>{@link android.content.Context#getCodeCacheDir() getCodeCacheDir()}</li> + <li>{@link android.content.Context#getDatabasePath(java.lang.String) getDatabasePath()}</li> + <li>{@link android.content.Context#getDir(java.lang.String,int) getDir()}</li> + <li>{@link android.content.Context#getNoBackupFilesDir() getNoBackupFilesDir()}</li> + <li>{@link android.content.Context#getFileStreamPath(java.lang.String) getFileStreamPath()}</li> + <li>{@link android.content.Context#getPackageCodePath() getPackageCodePath()}</li> + <li>{@link android.content.Context#getPackageResourcePath() getPackageResourcePath()}</li> + </ul> +</li> +<li>Campos {@link android.content.pm.ApplicationInfo}: + <ul> + <li>{@link android.content.pm.ApplicationInfo#dataDir dataDir}</li> + <li>{@link android.content.pm.ApplicationInfo#sourceDir sourceDir}</li> + <li>{@link android.content.pm.ApplicationInfo#nativeLibraryDir nativeLibraryDir}</li> + <li>{@link android.content.pm.ApplicationInfo#publicSourceDir publicSourceDir}</li> + <li>{@link android.content.pm.ApplicationInfo#splitSourceDirs splitSourceDirs}</li> + <li>{@link android.content.pm.ApplicationInfo#splitPublicSourceDirs splitPublicSourceDirs}</li> + </ul> +</li> +</ul> + +<p>Para depurar este recurso na prévia de desenvolvedor, é possível ativar a adoção +de uma unidade USB que está conectada a um dispositivo Android por meio de um cabo USB On-The-Go (OTG) executando este comando:</p> + +<pre class="no-prettyprint"> +$ adb shell sm set-force-adoptable true +</pre> + +<h2 id="behavior-apache-http-client">Remoção do cliente Apache HTTP</h2> +<p>Esta prévia remove o suporte para o cliente Apache HTTP. Se o aplicativo estiver usando este cliente e for direcionado +para Android 2.3 (nível da API 9) ou mais recente, use +a classe {@link java.net.HttpURLConnection}. Esta API é mais eficiente, pois reduz o uso de rede por meio de compressão transparente e armazenamento +em cachê de respostas, além de minimizar o consumo de energia. Para continuar usando as APIs do Apache HTTP, +deve-se primeiro declarar a dependência de tempo de compilação no arquivo {@code build.gradle}: +</p> +<pre> +android { + useLibrary 'org.apache.http.legacy' +} +</pre> +<p>O Android está mudando da biblioteca OpenSSL para +<a href="https://boringssl.googlesource.com/boringssl/" class="external-link">BoringSSL</a> +. Caso esteja usando o Android NDK no aplicativo, não vincule contra bibliotecas criptográficas +que não fazem parte da API de NDK, como {@code libcrypto.so} e {@code libssl.so}. Estas bibliotecas não são APIs públicas +e podem mudar ou apresentar erros sem notificar entre liberações e dispositivos. +Além disso, você pode se expor a vulnerabilidades de segurança. Em vez disso, +modifique o código nativo para chamar as APIs de criptografia Java via JNI ou para vincular estaticamente +com relação a uma biblioteca criptográfica de sua escolha.</p> + +<h2 id="behavior-audiomanager-Changes">Mudanças no AudioManager</h2> +<p>Ajustar o volume diretamente ou desativar o áudio de transmissões específicas por meio da classe {@link android.media.AudioManager} +não são mais recursos suportados. O método {@link android.media.AudioManager#setStreamSolo(int,boolean) +setStreamSolo()} é obsoleto e deve-se chamar o método +{@code AudioManager.requestAudioFocus()}. De forma semelhante, o método +{@link android.media.AudioManager#setStreamMute(int,boolean) setStreamMute()} é +obsoleto; em vez disso, chame o método {@code AudioManager.adjustStreamVolume()} +e passe o valor da direção de {@code ADJUST_MUTE} ou {@code ADJUST_UNMUTE}.</p> + +<h2 id="behavior-test-selection">Seleção de texto</h2> + +<img src="{@docRoot}preview/images/text-selection.gif" style="float:right; margin:0 0 20px 30px" width="360" height="640" /> + +<p>Quando os usuários selecionam o texto no aplicativo, agora é possível exibir ações de seleção de texto como +<em>Recortar</em>, <em>Copiar</em> e <em>Colar</em> na +<a href="http://www.google.com/design/spec/patterns/selection.html#selection-text-selection" class="external-link">barra de ferramentas flutuante</a>. A implementação da interação do usuário é semelhante ao processo +da barra de ação contextual, como descrito em +<a href="{@docRoot}guide/topics/ui/menus.html#CABforViews"> +Ativação do modo de ação contextual para vistas individuais</a>.</p> + +<p>Para implementar uma barra de ferramentas flutuante para seleção de texto, faça as seguintes alterações nos aplicativos +existentes:</p> +<ol> +<li>No objeto {@link android.view.View} ou {@link android.app.Activity}, altere as chamadas +{@link android.view.ActionMode} de +{@code startActionMode(Callback)} para {@code startActionMode(Callback, ActionMode.TYPE_FLOATING)}.</li> +<li>Pegue a implementação existente de {@code ActionMode.Callback} e torne-a uma extensão de +{@code ActionMode.Callback2}.</li> +<li>Substitua o método {@code Callback2.onGetContentRect()} para fornecer as coordenadas do conteúdo +do objeto {@link android.graphics.Rect} (como um retângulo de seleção de texto) na vista.</li> +<li>Se o posicionamento do retângulo deixar de ser válido e for o único elemento a ser invalidado, +chame o método {@code ActionMode.invalidateContentRect()}.</li> +</ol> + +<p>Caso esteja usando a <a href="{@docRoot}tools/support-library/index.html"> +biblioteca de suporte Android</a> revisão 22.2, saiba que as barras de ferramentas flutuantes não +têm compatibilidade com versões anteriores e que o appcompat tem controle sobre os objetos {@link android.view.ActionMode} por +padrão. Isto evita que barras de ferramentas flutuantes sejam exibidas. Para ativar o suporte de +{@link android.view.ActionMode} em um +{@link android.support.v7.app.AppCompatActivity}, chame +{@code android.support.v7.app.AppCompatActivity.getDelegate()} e, em seguida, chame +{@code android.support.v7.app.AppCompatDelegate.setHandleNativeActionModesEnabled()} no objeto +{@link android.support.v7.app.AppCompatDelegate} retornado e defina +o parâmetro de entrada para {@code false}. Esta chamada retorna o controle dos objetos {@link android.view.ActionMode} +à estrutura. Em dispositivos que são executados no M Preview, isto permite que a estrutura suporte os modos de +{@link android.support.v7.app.ActionBar} ou de barra de ferramenta flutuante, enquanto que, para dispositivos anteriores ao M Preview, +somente os modos {@link android.support.v7.app.ActionBar} são suportados.</p> + +<h2 id="behavior-keystore">Mudanças no Android Keystore</h2> +<p>Com esta prévia, +o <a href="{@docRoot}training/articles/keystore.html">provedor Android Keystore</a> não suporta mais +DSA. ECDSA ainda é suportado.</p> + +<p>As chaves que não exigem criptografia em rest não precisam ser excluídas quando a tela de bloqueio segura +é desativada ou redefinida (por exemplo, pelo usuário ou por um administrador do dispositivo). As chaves que exigem +criptografia serão excluídas durante esses eventos.</p> + +<h2 id="behavior-network">Mudanças de rede e Wi-Fi</h2> + +<p>Esta prévia introduz as seguintes alterações de comportamento nas APIs de rede e Wi-Fi.</p> +<ul> +<li>Os aplicativos podem alterar o estado dos objetos {@link android.net.wifi.WifiConfiguration} +somente se você os tiver criado. Você não tem permissão para modificar nem excluir objetos +{@link android.net.wifi.WifiConfiguration} criados pelo usuário ou outros aplicativos. +</li> +<li> +Anteriormente, se um aplicativo forçasse o dispositivo a se conectar a uma rede Wi-Fi específica usando +{@link android.net.wifi.WifiManager#enableNetwork(int,boolean) enableNetwork()} com a configuração +{@code disableAllOthers=true}, o dispositivo desconectava de outras redes, +como dados de celular. Nesta prévia, o dispositivo não rompe a conexão com outras redes. Se +o {@code targetSdkVersion} do aplicativo for {@code “20”} ou menor, ele é fixado +à rede Wi-Fi selecionada. Se o {@code targetSdkVersion} do aplicativo for {@code “21”} ou maior, use +as APIS de multi-rede (como +{@link android.net.Network#openConnection(java.net.URL) openConnection()}, +{@link android.net.Network#bindSocket(java.net.Socket) bindSocket()} e o novo método +{@code ConnectivityManager.bindProcessToNetwork()}) para garantir que o tráfego de rede +seja enviado na rede selecionada.</li> +</ul> + +<h2 id="behavior-camera">Mudanças no serviço de câmera</h2> +<p>Nesta prévia, o modelo para acessar recursos compartilhados no serviço de câmera foi alterado +do antigo modelo de acesso “primeiro a chegar, primeiro a ser atendido” para um modelo de acesso onde +os processos de alta prioridade são favorecidos. As mudanças no comportamento do serviço incluem:</p> +<ul> +<li>Acesso aos recursos do subsistema da câmera, incluindo abertura e configuração de um dispositivo de câmera, +concedido com base na prioridade do processo do aplicativo do cliente. Processos de aplicativos com atividades +visíveis ao usuário ou de primeiro plano são geralmente de alta prioridade, tornando a aquisição +e o uso de recursos da câmera mais dependentes.</li> +<li>Clientes de câmera ativa para aplicativos de menor prioridade podem ser "despejados" quando +um aplicativo de alta prioridade tenta usar a câmera. Na API {@link android.hardware.Camera} obsoleta, +isto resulta em +{@link android.hardware.Camera.ErrorCallback#onError(int,android.hardware.Camera) onError()} sendo +chamado para o cliente despejado. Na API {@link android.hardware.camera2 Camera2}, isto resulta em +{@link android.hardware.camera2.CameraDevice.StateCallback#onDisconnected(android.hardware.camera2.CameraDevice) onDisconnected()} +sendo chamado para o cliente despejado.</li> +<li>Em dispositivos com hardware de câmera adequado, processos de aplicativo separados podem +abrir e usar independentemente os dispositivos de câmera simultaneamente. No entanto, casos de uso de vários processos +em que o acesso simultâneo causa uma degradação significante de desempenho ou capacidades +de qualquer um dos dispositivos de câmera abertos agora são detectados e proibidos pelo serviço da câmera. Esta alteração +pode resultar em "despejos" para clientes de menor prioridade quando nenhum aplicativo está +tentando acessar o mesmo dispositivo de câmera diretamente. +</li> +<li> +Alterar o usuário atual faz com que os clientes da câmera ativa em aplicativos pertencentes à conta do usuário anterior +sejam despejados. O acesso à câmera é limitado a perfis de usuário pertencentes ao usuário do dispositivo atual. +Na prática, isso significa que uma conta de "convidado", por exemplo, não poderá deixar +processos em execução que usam o subsistema da câmera quando o usuário alternar para uma conta diferente. +</li> +</ul> + +<h2 id="behavior-art-runtime">Tempo de execução de ART</h2> +<p>O tempo de execução de ART agora implementa adequadamente as regras de acesso +para o método {@link java.lang.reflect.Constructor#newInstance(java.lang.Object...) newInstance()}. Esta +alteração corrige um problema onde o Dalvik estava verificando as regras de acesso incorretamente em versões anteriores. +Se o aplicativo usa o método +{@link java.lang.reflect.Constructor#newInstance(java.lang.Object...) newInstance()} e você quer +substituir as verificações de acesso, chame o método +{@link java.lang.reflect.Constructor#setAccessible(boolean) setAccessible()} com o parâmetro +de entrada definido como {@code true}. Se o aplicativo usar a +<a href="{@docRoot}tools/support-library/features.html#v7-appcompat">biblioteca v7 appcompat</a> ou a +<a href="{@docRoot}tools/support-library/features.html#v7-recyclerview">biblioteca v7 recyclerview</a>, +deve-se atualizá-lo para usar as versões mais recentes dessas bibliotecas. Caso contrário, certifique-se +de que as classes personalizadas mencionadas a partir do XML sejam atualizadas para que os construtores de classe estejam acessíveis.</p> + +<p>Esta prévia atualiza o comportamento do vinculador dinâmico. O vinculador dinâmico agora entende +a diferença entre um {@code soname} da biblioteca e o seu caminho +(<a href="https://code.google.com/p/android/issues/detail?id=6670" class="external-link"> +erro público 6670</a>), e a pesquisa por {@code soname} +agora está implementada. Os aplicativos que anteriormente trabalhavam e têm entradas {@code DT_NEEDED} inválidas +(geralmente, caminhos absolutos no sistema de arquivo na máquina de programação) podem falhar ao serem carregados.</p> + +<p>O sinalizador {@code dlopen(3) RTLD_LOCAL} agora está corretamente implementado. Observe que +{@code RTLD_LOCAL} é o padrão. Portanto, chamadas para {@code dlopen(3)} que não usam explicitamente +{@code RTLD_LOCAL} serão afetadas (a não ser que o aplicativo tenha usado explicitamente {@code RTLD_GLOBAL}). Com +{@code RTLD_LOCAL}, os símbolos não estarão disponíveis para as bibliotecas carregadas por chamadas posteriores a +{@code dlopen(3)} (o oposto ocorre quando mencionado por entradas {@code DT_NEEDED}).</p> +</p> + +<h2 id="behavior-apk-validation">Validação de APK</h2> +<p>A plataforma agora realiza validações mais estritas de APKs. Um APK é considerado corrompido se um arquivo +for declarado no manifesto, mas não estiver presente no próprio APK. Um APK deve ser atribuído novamente se qualquer +conteúdo for removido.</p> + +<h2 id="behavior-afw">Mudanças do Android for Work</h2> +<p>Esta prévia inclui as seguintes mudanças de comportamento para Android for Work:</p> +<ul> +<li><strong>Contatos de trabalho em contextos pessoais.</strong> O registro de chamadas do telefone do Google +agora exibe os contatos de trabalho quando o usuário visualiza chamadas anteriores. +A configuração {@code DevicePolicyManager.setCrossProfileCallerIdDisabled()} para {@code true} oculta +os contatos do perfil de trabalho no registro de chamadas do telefone. Os contatos de trabalho podem ser exibidos junto com os contatos pessoais +aos dispositivos por meio de Bluetooth somente +se {@code DevicePolicyManager.setBluetoothContactSharingDisabled()} estiver definido como {@code false}. Por +padrão, ele está definido como {@code true}. +</li> +<li><strong>Remoção de configuração Wi-Fi:</strong> as configurações de Wi-Fi adicionadas por um dono de perfil +(por exemplo, por meio de chamadas para o método +{@link android.net.wifi.WifiManager#addNetwork(android.net.wifi.WifiConfiguration) +addNetwork()}) agora são removidas se esse perfil de trabalho é excluído.</li> +<li><strong>Bloqueio de configuração Wi-Fi:</strong> qualquer configuração Wi-Fi criada por um dono do dispositivo +ativo não pode mais ser modificada nem excluída pelo usuário. O usuário ainda pode criar +e modificar as próprias configurações de Wi-Fi, contanto que a constante {@link android.os.UserManager} +{@link android.os.UserManager#DISALLOW_CONFIG_WIFI} não tenha sido definida por ele.</li> +<li><strong>Faça o download do Work Policy Controller por meio de uma adição de conta Google:</strong> quando uma conta Google +que requer um gerenciamento por meio do aplicativo Work Policy Controller (WPC) é adicionada ao dispositivo +fora de um contexto gerenciado, o fluxo de conta adicionada agora solicita ao usuário para instalar +o WPC adequado. Este comportamento também se aplica a contas adicionadas por meio de +<strong>Settings (Configurações) > Accounts (Contas)</strong> no assistente de configuração inicial do dispositivo.</li> +<li><strong>Alterações aos comportamentos específicos da API DevicePolicyManager:</strong> +chamar o método {@link android.app.admin.DevicePolicyManager#setCameraDisabled(android.content.ComponentName,boolean) setCameraDisabled()} +afeta a câmera somente para o usuário que realizou a chamada. Chamá-lo a partir do perfil gerenciado +não afeta os aplicativos de câmera em execução no usuário principal. Além disso, +o método {@link android.app.admin.DevicePolicyManager#setKeyguardDisabledFeatures(android.content.ComponentName,int) setKeyguardDisabledFeatures()} +agora está disponível para donos de perfil, além dos donos do dispositivo. Um dono de perfil pode definir +estas restrições de proteção de bloqueio: +<ul> +<li>{@link android.app.admin.DevicePolicyManager#KEYGUARD_DISABLE_TRUST_AGENTS} e + {@link android.app.admin.DevicePolicyManager#KEYGUARD_DISABLE_FINGERPRINT}, que afetam + as configurações de proteção de bloqueio para o usuário pai do perfil.</li> +<li>{@link android.app.admin.DevicePolicyManager#KEYGUARD_DISABLE_UNREDACTED_NOTIFICATIONS}, que + afeta somente as notificações geradas por aplicativos no perfil gerenciado.</li> +</ul> +</li> +</ul> diff --git a/docs/html-intl/intl/pt-br/preview/features/runtime-permissions.jd b/docs/html-intl/intl/pt-br/preview/features/runtime-permissions.jd new file mode 100644 index 0000000..762e1ae --- /dev/null +++ b/docs/html-intl/intl/pt-br/preview/features/runtime-permissions.jd @@ -0,0 +1,794 @@ +page.title=Permissões +page.tags=previewresources, androidm +page.keywords=permissions, runtime, preview +page.image={@docRoot}preview/images/permissions_check.png +@jd:body + + +<div id="qv-wrapper"> + <div id="qv"> + <h2>Visualização rápida</h2> + <ul> + <li>Se o aplicativo direciona o M Preview SDK, ele indica aos usuários para conceder + permissões no tempo de execução, em vez de tempo de instalação.</li> + <li>Os usuários podem revogar as permissões a qualquer momento na tela de configurações +do aplicativo.</li> + <li>O aplicativo precisa verificar se tem as permissões necessárias +sempre que for executado.</li> + </ul> + + <h2>Neste documento</h2> + <ol> + <li><a href="#overview">Visão geral</a></li> + <li><a href="#coding">Codificação para permissões de tempo de execução</a></li> + <li><a href="#testing">Teste de permissões de tempo de execução</a></li> + <li><a href="#best-practices">Práticas recomendadas</a></li> + </ol> + +<!-- + <h2>Related Samples</h2> + <ol> + <li></li> + </ol> +--> + +<!-- + <h2>See also</h2> + <ol> + <li></li> + </ol> +--> + </div> <!-- qv --> +</div> <!-- qv-wrapper --> + + +<p> + O M Developer Preview introduz um novo modelo de permissões de aplicativo +que agiliza o processo de instalação e atualização de aplicativos para os usuários. Se um aplicativo + que está sendo executado no M Preview suporta o novo modelo de permissões, o usuário não precisa conceder + permissões ao instalar ou atualizar o aplicativo. Em vez disso, o aplicativo + solicita as permissões à medida que precisar e o sistema exibe um diálogo + ao usuário pedindo a permissão. +</p> + +<p> + Se um aplicativo suportar o novo modelo de permissões, ele + ainda poderá ser instalado e executado em versões mais antigas do Android, usando o antigo modelo + de permissões nesses dispositivos. +</p> + +<h2 id="overview"> + Visão geral +</h2> + +<p> + Com o M Developer Preview, a plataforma introduz um novo modelo + de permissões. Eis um resumo dos componentes essenciais deste novo modelo: +</p> + +<ul> + <li> + <strong>Declaração de permissões:</strong> O aplicativo declara todas + as permissões necessárias no manifesto, como nas plataformas anteriores do Android. + </li> + + <li> + <strong>Grupos de permissão:</strong> As permissões são divididas em +<em>grupos de permissão</em>, baseados na funcionalidade. Por exemplo: o grupo de permissão + <code>CONTACTS</code> contém permissões para ler e escrever + informações de perfil e contatos do usuário. + </li> + + <li> + <p><strong>Permissões limitadas concedidas no tempo de instalação:</strong> Quando o usuário + instala ou atualiza o aplicativo, o sistema concede todas + as permissões que o aplicativo solicita que estão em {@link + android.content.pm.PermissionInfo#PROTECTION_NORMAL PROTECTION_NORMAL}. + Por exemplo: as permissões de internet e despertador estão em {@link + android.content.pm.PermissionInfo#PROTECTION_NORMAL PROTECTION_NORMAL}. Portanto, + as permissões são concedidas automaticamente no tempo de instalação. + </p> + + <p>O sistema pode também conceder as permissões de sistema e assinatura de aplicativo, + como descrito em <a href="#system-apps">permissões de assinatura + e aplicativos do sistema</a>. O usuário <em>não</em> é alertado a conceder permissões + no tempo de instalação.</p> + </li> + + <li> + <strong>O usuário concede permissões no tempo de execução:</strong> Quando um aplicativo solicita + uma permissão, o sistema exibe um diálogo ao usuário e, em seguida, + chama a função de retorno de chamada do aplicativo para notificá-lo se a permissão foi concedida. Se um + usuário concede uma permissão, o aplicativo recebe todas + as permissões na área funcional desta permissão que foram declaradas no manifesto do aplicativo. + </li> + +</ul> + +<p> + Este modelo de permissões altera a forma como o aplicativo se comporta diante os recursos + que precisam de permissões. Eis um resumo das práticas de desenvolvimento que devem + ser seguidas para ajustar para este modelo: +</p> + +<ul> + + <li> + <strong>Sempre verificar as permissões:</strong> Quando o aplicativo + precisa realizar uma ação que requer uma permissão, ele deve primeiro verificar + se já a tem. Caso não tenha, ele solicita + o concedimento desta permissão. + </li> + + <li> + <strong>Lidar com falta de permissões dignamente:</strong> Se o aplicativo não + recebe a permissão adequada, ele deve lidar com a falha de forma limpa. + Por exemplo, se a permissão é necessária para um recurso adicionado, + o aplicativo pode desativar este recurso. Se a permissão for essencial + para que o aplicativo funcione, ele desativará toda sua funcionalidade + e informará ao usuário que precisa desta permissão. + </li> + + <div class="figure" style="width:220px" id="fig-perms-screen"> + <img src="{@docRoot}preview/features/images/app-permissions-screen_2x.png" srcset="{@docRoot}preview/features/images/app-permissions-screen.png 1x, {@docRoot}preview/features/images/app-permissions-screen_2x.png 2x" alt="" width="220"> + <p class="img-caption"> + <strong>Figura 1.</strong> Tela de permissões nas configurações do aplicativo. + </p> + </div> + + <li> + <strong>As permissões são revogáveis:</strong> Os usuários podem revogar as permissões + de um aplicativo a qualquer momento. Se um usuário desativar as permissões de um aplicativo, + o aplicativo <em>não</em> é notificado. Novamente, o aplicativo deve verificar + se tem todas as permissões necessárias antes de realizar qualquer ação restrita. + </li> +</ul> + +<p class="note"> + <strong>Observação:</strong> se um aplicativo direcionar o M Developer Preview, ele + <em>deve</em> usar o novo modelo de permissões. +</p> + +<p> + No momento do lançamento do M Developer Preview, + nem todos os aplicativos Google implementam completamente o novo modelo de permissões. A Google está atualizando estes aplicativos + durante o curso do M Developer Preview para respeitar adequadamente a configuração + de alternação de permissões. +</p> + +<p class="note"> + <strong>Observação:</strong> se o aplicativo tiver a própria superfície de API, + não represente permissões sem antes garantir que o autor da chamada tenha as permissões necessárias + para acessar esses dados. +</p> + +<h3 id="system-apps"> + Permissões de assinatura e aplicativos do sistema +</h3> + +<p> + Geralmente, quando um usuário instala um aplicativo, o sistema somente fornece ao aplicativo o + {@link android.content.pm.PermissionInfo#PROTECTION_NORMAL + PROTECTION_NORMAL}. No entanto, sob algumas circunstâncias, o sistema concede + ao aplicativo mais permissões: +</p> + +<ul> + <li>Se um aplicativo faz parte da imagem do sistema, ele recebe automaticamente + todas as permissões listadas no manifesto. + </li> + + <li>Se o aplicativo solicitar as permissões no manifesto que está em {@link + android.content.pm.PermissionInfo#PROTECTION_SIGNATURE PROTECTION_SIGNATURE}, + e estiver assinado com o mesmo certificado que o aplicativo que declarou essas permissões, + o sistema concederá essas permissões na instalação ao aplicativo + que fez a solicitação. + </li> +</ul> + +<p> + Em ambos os casos, o usuário ainda pode revogar as permissões a qualquer + momento acessando a tela de <strong>configurações</strong> do sistema e escolhendo <strong>Aplicativos + ></strong> <i>app_name</i> <strong>> Permissões</strong>. O aplicativo + deve continuar com a verificação das permissões no tempo de execução e solicitá-las + se necessário. +</p> + +<h3 id="compatibility"> + Compatibilidade anterior e posterior +</h3> + +<p> + Se um aplicativo não direciona para o M Developer Preview, ele deve continuar a usar + o modelo antigo de permissões mesmo nos dispositivos M Preview. Quando o usuário instala + o aplicativo, o sistema pede para que ele conceda todas as permissões + listadas no manifesto do aplicativo. +</p> + +<p class="note"> + <strong>Observação:</strong> em dispositivos que são executados no M Developer Preview, + um usuário pode desativar as permissões para qualquer aplicativo (incluindo aplicativos de legado) + na tela de configurações do aplicativo. Se um usuário desativa as permissões de um aplicativo de legado, o sistema + silenciosamente desativa a funcionalidade adequada. Quando um aplicativo tentar realizar + uma operação que requer esta permissão, a operação não necessariamente causará + uma exceção. Em vez disso, ele retornará um conjunto de dados vazio, + sinalizará um erro ou exibirá um comportamento inesperado. Por exemplo, caso queira + consultar um calendário sem permissão, o método retorna um conjunto de dados vazio. +</p> + +<p> + Se instalar um aplicativo usando o novo modelo de permissões em um dispositivo + que não está executando o M Preview, + o sistema o tratará da mesma forma que qualquer outro aplicativo: o sistema pedirá + para que o usuário conceda todas as permissões declaradas no momento da instalação. +</p> + +<p class="note"> + <strong>Observação:</strong> para a liberação de prévia, deve-se definir a versão mínima de SDK + para o M Preview SDK para compilar com o SDK de prévia. Isto significa que você + não poderá testar tais aplicativos em plataformas mais antigas durante a prévia + de desenvolvedor. +</p> + +<h3 id="perms-vs-intents">Permissões versus intenções</h3> + +<p> + Em vários casos, é possível escolher entre duas maneiras para que o aplicativo realize + uma tarefa. É possível fazer com que o aplicativo solicite uma permissão para realizar a operação + por conta própria. Alternativamente, é possível fazer com que o aplicativo use uma intenção para que outro aplicativo + realize a tarefa. +</p> + +<p> + Por exemplo, imagine que o aplicativo precisa da função de tirar fotos com + a câmera do dispositivo. O aplicativo pode solicitar a permissão +<code>android.permission.CAMERA</code>, que permite que ele acesse + a câmera diretamente. O aplicativo então usará as APIs da câmera + para controlar a câmera e tirar uma foto. Esta abordagem fornece ao aplicativo + controle completo sobre o processo de fotografia e permite + que você incorpore a IU da câmera. +</p> + +<p> + No entanto, caso não precise de tal controle, é possível apenas usar uma intenção {@link + android.provider.MediaStore#ACTION_IMAGE_CAPTURE ACTION_IMAGE_CAPTURE} + para solicitar uma imagem. Ao iniciar a intenção, o usuário deve escolher + um aplicativo de câmera (se não houver um aplicativo padrão de câmera) + para tirar a foto. O aplicativo da câmera retorna a imagem ao método {@link + android.app.Activity#onActivityResult onActivityResult()} do aplicativo. +</p> + +<p> + De forma semelhante, caso precise realizar uma ligação, + acessar os contatos do usuário etc., é possível fazer estas ações criando uma intenção adequada + ou solicitar a permissão e o acesso aos objetos adequados diretamente. Essas são + as vantagens e desvantagens de cada abordagem. +</p> + +<p> + Se usar permissões: +</p> + +<ul> + <li>O aplicativo tem controle completo sobre a experiência do usuário ao realizar + a operação. No entanto, esse controle amplo é adicionado à complexidade da tarefa, + levando em consideração a necessidade de projetar uma IU adequada. + </li> + + <li>O usuário deve fornecer a permissão uma vez: na primeira realização + da operação. Depois, o aplicativo pode realizar a operação sem + precisar de mais interações do usuário. No entanto, + se o usuário não conceder a permissão (ou revogá-la posteriormente), + o aplicativo não conseguirá realizar a operação. + </li> +</ul> + +<p> + Se usar uma intenção: +</p> + +<ul> + <li>Você não terá que projetar a IU para a operação. O aplicativo que lida com + a intenção fornece a IU. No entanto, isso significa que você não terá controle + completo sobre a experiência de usuário. O usuário poderá interagir com um aplicativo + que você nunca viu. + </li> + + <li>Se o usuário não tem um aplicativo padrão para a operação, + o sistema pede para que o usuário escolha um aplicativo. + Se o usuário não designar um manipulador padrão, + ele terá que acessar uma caixa de diálogo extra sempre que realizar a operação. + </li> +</ul> + +<h2 id="coding">Codificação para permissões de tempo de execução</h2> + +<p> + Se um aplicativo direciona o novo M Developer Preview, ele deve usar o novo + modelo de permissões. Isto significa que, além de declarar as permissões necessárias no manifesto, + deve-se também verificar se o aplicativo + tem as permissões no tempo de execução e, + caso ainda não as tenha, solicitá-las. +</p> + +<h3 id="enabling"> + Possibilitar um novo modelo de permissões +</h3> + +<p> + Para possibilitar o modelo de permissões do M Developer Preview, configure o atributo +<code>targetSdkVersion</code> do aplicativo para <code>"MNC"</code> e +<code>compileSdkVersion</code> para <code>"android-MNC"</code>. Isto ativará + todos os novos recursos de permissão. +</p> + +<p> + Para a liberação de uma prévia, deve-se definir <code>minSdkVersion</code> para +<code>"MNC"</code> para compilar com o SDK de prévia. +</p> + +<h3 id="m-only-perm"> + Designar uma permissão somente para o M Preview +</h3> + +<p> + É possível usar o novo elemento <code><uses-permission-sdk-m></code> no manifesto do aplicativo + para indicar que uma permissão é necessária apenas no M Developer Preview. Se você + declarar uma permissão desta maneira, sempre que o aplicativo for instalado + em um dispositivo mais antigo, o sistema não solicitará ao usuário + nem concederá a permissão ao aplicativo. Usando o elemento <code><uses-permission-sdk-m></code> +, é possível adicionar novas permissões + a versões atualizadas do aplicativo sem forçar os usuários a conceder permissões + ao instalar a atualização. +</p> + +<p> + Se o aplicativo está sendo executado em um dispositivo com M Developer Preview, o +<code><uses-permission-sdk-m></code> se comporta da mesma forma que +<code><a href="{@docRoot}guide/topics/manifest/uses-permission-element.html"><uses-permission></a></code>. + O sistema não solicita ao usuário que conceda quaisquer permissões ao instalar o aplicativo + e o aplicativo solicita as permissões à medida que forem necessárias. +</p> + +<h3 id="prompting"> + Solicitação de permissões +</h3> + +<p> + Se o aplicativo usa o novo modelo de permissões do M Developer Preview, + o usuário não recebe solicitações para conceder todas as permissões quando o aplicativo é iniciado pela primeira vez em um dispositivo + que está sendo executado no M Preview. Em vez disso, o aplicativo solicita as permissões à medida + que forem necessárias. Quando um aplicativo solicita uma permissão, o sistema exibe uma caixa de diálogo + ao usuário. +</p> + +<p> + Se o aplicativo executar em um dispositivo que tem SDK 22 ou inferior, + ele usará o antigo modelo de permissões. Quando o usuário instala o aplicativo, ele é solicitado a conceder + todas as permissões que o aplicativo lista no manifesto, + exceto as permissões que forem marcadas com <code><uses-permission-sdk-m></code>. +</p> + +<h4 id="check-platform">Verifique em qual plataforma o aplicativo está sendo executado</h4> + +<p> + Este modelo de permissões é suportado apenas em dispositivos que estão executando + o M Developer Preview. Antes de chamar qualquer um destes métodos, + o aplicativo deve verificar em qual plataforma está sendo executado + verificando o valor de {@link android.os.Build.VERSION#CODENAME + Build.VERSION.CODENAME}. Se o dispositivo estiver sendo executado no M Developer Preview, + {@link android.os.Build.VERSION#CODENAME CODENAME} será <code>"MNC"</code>. +</p> + +<h4 id="check-for-permission">Verifique se o aplicativo tem a permissão necessária</h4> + +<p>Quando o usuário tenta fazer algo que requer uma permissão, + o aplicativo verifica se tem a permissão para realizar esta operação. Para fazer isto, + o aplicativo chama + <code>Context.checkSelfPermission(<i>permission_name</i>)</code>. O aplicativo + deve realizar isto para verificar se sabe que o usuário já concedeu esta permissão, + levando em consideração que o usuário pode revogar + as permissões do aplicativo a qualquer momento. Por exemplo, + se um usuário quiser usar um aplicativo para tirar uma foto, o aplicativo chamará + <code>Context.checkSelfPermission(Manifest.permission.CAMERA)</code>.</p> + +<p class="table-caption" id="permission-groups"> + <strong>Tabela 1.</strong> Permissões e grupos de permissões.</p> +<table> + <tr> + <th scope="col">Grupo de permissões</th> + <th scope="col">Permissões</th> + </tr> + + <tr> + <td><code>android.permission-group.CALENDAR</code></td> + <td> + <ul> + <li> + <code>android.permission.READ_CALENDAR</code> + </li> + </ul> + <ul> + <li> + <code>android.permission.WRITE_CALENDAR</code> + </li> + </ul> + </td> + </tr> + + <tr> + <td><code>android.permission-group.CAMERA</code></td> + <td> + <ul> + <li> + <code>android.permission.CAMERA</code> + </li> + </ul> + </td> + </tr> + + <tr> + <td><code>android.permission-group.CONTACTS</code></td> + <td> + <ul> + <li> + <code>android.permission.READ_CONTACTS</code> + </li> + <li> + <code>android.permission.WRITE_CONTACTS</code> + </li> + <li> + <code>android.permission.READ_PROFILE</code> + </li> + <li> + <code>android.permission.WRITE_PROFILE</code> + </li> + </ul> + </td> + </tr> + + <tr> + <td><code>android.permission-group.LOCATION</code></td> + <td> + <ul> + <li> + <code>android.permission.ACCESS_FINE_LOCATION</code> + </li> + <li> + <code>android.permission.ACCESS_COARSE_LOCATION</code> + </li> + </ul> + </td> + </tr> + + <tr> + <td><code>android.permission-group.MICROPHONE</code></td> + <td> + <ul> + <li> + <code>android.permission.RECORD_AUDIO</code> + </li> + </ul> + </td> + </tr> + + <tr> + <td><code>android.permission-group.PHONE</code></td> + <td> + <ul> + <li> + <code>android.permission.READ_PHONE_STATE</code> + </li> + <li> + <code>android.permission.CALL_PHONE</code> + </li> + <li> + <code>android.permission.READ_CALL_LOG</code> + </li> + <li> + <code>android.permission.WRITE_CALL_LOG</code> + </li> + <li> + <code>com.android.voicemail.permission.ADD_VOICEMAIL</code> + </li> + <li> + <code>android.permission.USE_SIP</code> + </li> + <li> + <code>android.permission.PROCESS_OUTGOING_CALLS</code> + </li> + </ul> + </td> + </tr> + + <tr> + <td><code>android.permission-group.SENSORS</code></td> + <td> + <ul> + <li> + <code>android.permission.BODY_SENSORS</code> + </li> + </ul> + <ul> + <li> + <code>android.permission.USE_FINGERPRINT</code> + </li> + </ul> + </td> + </tr> + + <tr> + <td><code>android.permission-group.SMS</code></td> + <td> + <ul> + <li> + <code>android.permission.SEND_SMS</code> + </li> + <li> + <code>android.permission.RECEIVE_SMS</code> + </li> + <li> + <code>android.permission.READ_SMS</code> + </li> + <li> + <code>android.permission.RECEIVE_WAP_PUSH</code> + </li> + <li> + <code>android.permission.RECEIVE_MMS</code> + </li> + <li> + <code>android.permission.READ_CELL_BROADCASTS</code> + </li> + </ul> + </td> + </tr> + +</table> + +<h4 id="request-permissions">Solicitar permissões se necessário</h4> + +<p>Se o aplicativo já não tem a permissão necessária, ele chama o método + <code>Activity.requestPermissions(String[], int)</code> para solicitar + as permissões necessárias. O aplicativo passa + as permissões que deseja e também um "código de solicitação" do inteiro. + Este método funciona de forma assíncrona: ele retorna imediatamente e, + depois que o usuário responde à caixa de diálogo, o sistema chama + o método de retorno de chamada do aplicativo com os resultados, passando o mesmo "código de solicitação" que o aplicativo passou + para <code>requestPermissions()</code>.</p> + + <p>O seguinte código verifica se o aplicativo tem a permissão + para ler os contatos do usuário e solicita a permissão, se necessário:</p> + +<pre> +if (checkSelfPermission(Manifest.permission.READ_CONTACTS) + != PackageManager.PERMISSION_GRANTED) { + requestPermissions(new String[]{Manifest.permission.READ_CONTACTS}, + MY_PERMISSIONS_REQUEST_READ_CONTACTS); + + // MY_PERMISSIONS_REQUEST_READ_CONTACTS is an + // app-defined int constant + + return; +} +</pre> + +<h4 id="handle-response">Lidar com a resposta de solicitação das permissões</h4> + +<p> + Quando um aplicativo solicita as permissões, o sistema apresenta uma caixa de diálogo + ao usuário. Quando o usuário responde, o sistema invoca o + <code>Activity.onRequestPermissionsResult(int, String[], int[])</code> + do aplicativo, passando a ele a resposta do usuário. O aplicativo precisa substituir este método. O retorno de chamada + recebe o mesmo código de solicitação passado para + <code>requestPermissions()</code>. Por exemplo, se um aplicativo solicita o acesso + <code>READ_CONTACTS</code>, ele pode ter o seguinte + método de retorno de chamada: +</p> + +<pre> +@Override +public void onRequestPermissionsResult(int requestCode, + String permissions[], int[] grantResults) { + switch (requestCode) { + case MY_PERMISSIONS_REQUEST_READ_CONTACTS: { + if (grantResults[0] == PackageManager.PERMISSION_GRANTED) { + + // permission was granted, yay! do the + // calendar task you need to do. + + } else { + + // permission denied, boo! Disable the + // functionality that depends on this permission. + } + return; + } + + // other 'switch' lines to check for other + // permissions this app might request + } +} +</pre> + + <p>Se o usuário concede a permissão, o sistema fornece ao aplicativo todas as permissões + que o manifesto do aplicativo lista para esta área funcional. Se o usuário negar a solicitação, + deve-se tomar a ação adequada. Por exemplo, deve-se desativar + quaisquer ações de menu que dependam desta permissão. + </li> +</p> + +<p> + Quando o sistema pede para que o usuário conceda uma permissão, esse usuário tem a opção + de dizer ao sistema para que não peça esta permissão novamente. Nesse caso, + quando um aplicativo usa <code>requestPermissions()</code> para solicitar esta permissão, + o sistema nega imediatamente. Neste caso, o sistema chama + <code>onRequestPermissionsResult()</code> da mesma forma que faria se o usuário tivesse + rejeitado explicitamente a solicitação novamente. Por este motivo, o aplicativo + não pode presumir que uma interação direta com o usuário ocorreu. +</p> + +<h2 id="testing">Teste de permissões de tempo de execução</h2> + + +<p> + Se o aplicativo for direcionado para o M Developer Preview, deve-se testar + se ele lida com as permissões corretamente. Não se pode presumir que o aplicativo + terá qualquer permissão quando executado. Quando o aplicativo é iniciado pela primeira vez, + é provável que não tenha permissões. O usuário pode revogar e restaurar permissões + a qualquer momento. +</p> + +<p> + Deve-se testar o aplicativo para garantir que ele se comporte corretamente em todas + as situações de permissão. Com o M Preview SDK, fornecemos os novos comandos + de <a href="{@docRoot}tools/help/adb.html">Android + Debug Bridge (adb)</a> para possibilitar que o aplicativo seja testado com quaisquer + configurações de permissões necessárias. +</p> + +<h3> + Novas opções e comandos adb +</h3> + +<p> + As ferramentas da plataforma M Preview SDK fornecem vários comandos novos para permitir + que você teste como o aplicativo lida com permissões. +</p> + +<h4> + Instalar com permissões +</h4> + +<p> + É possível usar a nova opção <code>-g</code> do comando <a href="{@docRoot}tools/help/adb.html#move"><code>adb + install</code></a>, que instala o aplicativo + e fornece todas as permissões listadas em seu manifesto: +</p> + +<pre class="no-pretty-print"> +$ adb install -g <path_to_apk> +</pre> + +<h4> + Conceder e revogar permissões +</h4> + +<p> + É possível usar os novos comandos do <a href="{@docRoot}tools/help/adb.html#pm">gerenciador + de pacotes (pm)</a> de ADB para conceder e revogar as permissões de um aplicativo instalado. + Esta funcionalidade pode ser útil para testes automatizados. +</p> + +<p> + Para conceder uma permissão, use o comando <code>grant</code> do gerenciador de pacote: +</p> + +<pre class="no-pretty-print"> +$ adb pm grant <package_name> <permission_name> +</pre> + +<p> + Por exemplo: para conceder a permissão do pacote com.example.myapp para gravar áudios, + use este comando: +</p> + +<pre class="no-pretty-print"> +$ adb pm grant com.example.myapp android.permission.RECORD_AUDIO +</pre> + +<p> + Para revogar uma permissão, use o comando <code>revoke</code> do gerenciador de pacote: +</p> + +<pre class="no-pretty-print"> +$ adb pm revoke <package_name> <permission_name> +</pre> + +<h2 id="best-practices">Práticas recomendadas</h2> + +<p> + O novo modelo de permissões fornece aos usuários uma experiência mais suave + e facilita a instalação de aplicativos, deixando-os mais confortáveis + com o que os aplicativos estão fazendo. Sugerimos que você siga as práticas recomendadas para aproveitar + todas as vantagens do novo modelo. +</p> + + +<h3 id="bp-what-you-need">Peça somente as permissões necessárias</h3> + +<p> + Sempre que você pede uma permissão, o usuário é forçado a tomar uma decisão. + Se o usuário negar a solicitação, a funcionalidade do aplicativo será reduzida. + Deve-se minimizar o número de solicitações realizadas. +</p> + +<p> + Por exemplo: o aplicativo pode frequentemente adquirir a funcionalidade necessária usando + uma <a href="{@docRoot}guide/components/intents-filters.html">intenção</a> em vez + de solicitar permissões. Se o aplicativo precisa tirar fotos com a câmera do telefone, + é possível usar uma intenção {@link + android.provider.MediaStore#ACTION_IMAGE_CAPTURE + MediaStore.ACTION_IMAGE_CAPTURE}. Quando o aplicativo executa a intenção, + o sistema pede para que o usuário escolha um aplicativo de câmera já instalado + para tirar a foto. +</p> + +<h3 id="bp-dont-overwhelm"> + Não oprima o usuário +</h3> + +<p> + Se você confrontar o usuário com várias solicitações de permissão de uma só vez, + é possível que ele se sinta oprimido e saia do aplicativo. + Em vez disso, deve-se solicitar as permissões somente quando necessário. +</p> + +<p> + Em alguns casos, uma ou mais permissões podem ser absolutamente essenciais para o aplicativo. + Nesta situação, faz sentido solicitar todas as permissões assim + que o aplicativo é iniciado. Por exemplo: se você fizer um aplicativo de fotografia, + ele precisará de acesso à câmera do dispositivo. Quando o usuário iniciar o aplicativo + pela primeira vez, ele não se surpreenderá quando receber + uma solicitação de permissão para usar a câmera. Mas, se o mesmo aplicativo tiver um recurso + para compartilhar fotos com os contatos do usuário, <em>não</em> se deve + pedir esta permissão na primeira inicialização. Em vez disso, espere o usuário tentar usar + o recurso de compartilhamento para pedir a permissão. +</p> + +<p> + Se o aplicativo fornecer um tutorial, faz sentido solicitar as permissões + necessárias no final da sequência do tutorial. +</p> + +<h3 id="bp-explain"> + Explique o porquê da necessidade das permissões +</h3> + +<p> + O diálogo de permissões exibido pelo sistema ao chamar + <code>requestPermissions()</code> diz quais permissões o aplicativo requer, + mas não diz o porquê. Em alguns casos, o usuário pode achar isto confuso. + É uma boa ideia explicar ao usuário o porquê da necessidade das permissões + para o aplicativo antes de chamar <code>requestPermissions()</code>. +</p> + +<p> + Por exemplo: um aplicativo de fotografia pode precisar usar serviços de localização + para poder marcar as fotos geograficamente. Um usuário normal pode não entender que uma foto + pode conter informações de localização e ficar confuso quando + o aplicativo de fotografia quiser saber a localização. Portanto, neste caso, é uma boa ideia o aplicativo explicar + ao usuário sobre este recurso <em>antes</em> de chamar + <code>requestPermissions()</code>. +</p> + +<p> + Uma maneira de fazer isto é incorporar estas solicitações em um tutorial do aplicativo. O tutorial pode exibir cada um dos recursos + do aplicativo e, à medida que fizer isto, + pode também explicar quais permissões são necessárias. Por exemplo, o tutorial do aplicativo de fotografia + pode demonstrar os recursos de compartilhamento de fotos com os contatos e, + em seguida, dizer ao usuário que ele precisa fornecer as permissões + para que o aplicativo possa visualizar os contatos. O aplicativo pode então chamar <code>requestPermissions()</code> para solicitar + ao usuário este acesso. É claro que nem todos os usuários seguirão o tutorial. + Portanto, ainda é necessário verificar e solicitar as permissões durante + a operação normal do aplicativo. +</p> diff --git a/docs/html-intl/intl/pt-br/preview/images/direct-share-screen.png b/docs/html-intl/intl/pt-br/preview/images/direct-share-screen.png Binary files differnew file mode 100644 index 0000000..a53a33e --- /dev/null +++ b/docs/html-intl/intl/pt-br/preview/images/direct-share-screen.png diff --git a/docs/html-intl/intl/pt-br/preview/images/direct-share-screen_2x.png b/docs/html-intl/intl/pt-br/preview/images/direct-share-screen_2x.png Binary files differnew file mode 100644 index 0000000..87816ff --- /dev/null +++ b/docs/html-intl/intl/pt-br/preview/images/direct-share-screen_2x.png diff --git a/docs/html-intl/intl/pt-br/preview/images/fingerprint-screen.png b/docs/html-intl/intl/pt-br/preview/images/fingerprint-screen.png Binary files differnew file mode 100644 index 0000000..77f9982 --- /dev/null +++ b/docs/html-intl/intl/pt-br/preview/images/fingerprint-screen.png diff --git a/docs/html-intl/intl/pt-br/preview/images/fingerprint-screen_2x.png b/docs/html-intl/intl/pt-br/preview/images/fingerprint-screen_2x.png Binary files differnew file mode 100644 index 0000000..4749bcf --- /dev/null +++ b/docs/html-intl/intl/pt-br/preview/images/fingerprint-screen_2x.png diff --git a/docs/html-intl/intl/pt-br/preview/images/m-preview-timeline-crop.png b/docs/html-intl/intl/pt-br/preview/images/m-preview-timeline-crop.png Binary files differnew file mode 100644 index 0000000..724a6af --- /dev/null +++ b/docs/html-intl/intl/pt-br/preview/images/m-preview-timeline-crop.png diff --git a/docs/html-intl/intl/pt-br/preview/images/m-preview-timeline.png b/docs/html-intl/intl/pt-br/preview/images/m-preview-timeline.png Binary files differnew file mode 100644 index 0000000..e9a339e --- /dev/null +++ b/docs/html-intl/intl/pt-br/preview/images/m-preview-timeline.png diff --git a/docs/html-intl/intl/pt-br/preview/images/perf-test-frame-latency.png b/docs/html-intl/intl/pt-br/preview/images/perf-test-frame-latency.png Binary files differnew file mode 100644 index 0000000..87d1cfc --- /dev/null +++ b/docs/html-intl/intl/pt-br/preview/images/perf-test-frame-latency.png diff --git a/docs/html-intl/intl/pt-br/preview/images/perf-test-framestats.png b/docs/html-intl/intl/pt-br/preview/images/perf-test-framestats.png Binary files differnew file mode 100644 index 0000000..589a923 --- /dev/null +++ b/docs/html-intl/intl/pt-br/preview/images/perf-test-framestats.png diff --git a/docs/html-intl/intl/pt-br/preview/images/text-selection.gif b/docs/html-intl/intl/pt-br/preview/images/text-selection.gif Binary files differnew file mode 100644 index 0000000..1d82fc6 --- /dev/null +++ b/docs/html-intl/intl/pt-br/preview/images/text-selection.gif diff --git a/docs/html-intl/intl/pt-br/preview/images/work-profile-screen.png b/docs/html-intl/intl/pt-br/preview/images/work-profile-screen.png Binary files differnew file mode 100644 index 0000000..c3e4e44 --- /dev/null +++ b/docs/html-intl/intl/pt-br/preview/images/work-profile-screen.png diff --git a/docs/html-intl/intl/pt-br/preview/images/work-profile-screen_2x.png b/docs/html-intl/intl/pt-br/preview/images/work-profile-screen_2x.png Binary files differnew file mode 100644 index 0000000..5dcf610 --- /dev/null +++ b/docs/html-intl/intl/pt-br/preview/images/work-profile-screen_2x.png diff --git a/docs/html-intl/intl/pt-br/preview/overview.jd b/docs/html-intl/intl/pt-br/preview/overview.jd new file mode 100644 index 0000000..ce5a596 --- /dev/null +++ b/docs/html-intl/intl/pt-br/preview/overview.jd @@ -0,0 +1,362 @@ +page.title=Visão geral do programa +page.metaDescription=Boas-vindas ao Android M Developer Preview, um programa que fornece tudo que é necessário para testar e otimizar os aplicativos para a próxima versão do Android. +page.image=images/cards/card-preview_16-9_2x.png +page.tags="preview", "developer", "android" + +@jd:body + +<p> + Boas-vindas ao <strong>Android M Developer Preview</strong>, um programa que fornece + tudo que é necessário para testar e otimizar os aplicativos para a próxima versão + do Android. É de graça e você pode começar agora mesmo: basta fazer + o download das ferramentas M Developer Preview. +</p> + +<div style="background-color:#eceff1;padding:1em;"> +<div class="wrap"> + <div class="cols"> + <div class="col-4of12"> + <h5> + Imagens de sistema de emulador e hardware + </h5> + + <p> + Execute e teste os aplicativos no Nexus 5, 6, 9 e Player (para TV), bem como + em emuladores. + </p> + </div> + + <div class="col-4of12"> + <h5> + Código de plataforma mais recente + </h5> + + <p> + Nós forneceremos várias atualizações durante a prévia. Portanto, você + testará de acordo com as alterações mais recentes da plataforma. + </p> + </div> + + <div class="col-4of12"> + <h5> + Atualizações entregues por OTA + </h5> + + <p> + É possível obter atualizações por OTA (over-the-air) ao programar o dispositivo + em flash para a prévia inicial. + </p> + </div> + </div> + + <div class="cols"> + + + <div class="col-4of12"> + <h5> + Novos comportamentos e capacidades + </h5> + + <p> + Inicie o trabalho cedo para suportar os novos comportamentos da plataforma, + como novo modelo de permissões de tempo de execução e recursos de economia de energia. + </p> + </div> + + <div class="col-4of12"> + <h5> + Janela de prioridades para problemas informados por desenvolvedores + </h5> + + <p> + Durante as primeiras semanas, nós daremos prioridade aos problemas informados + por desenvolvedores. Portanto, teste e forneça-nos feedback o quanto antes. + </p> + </div> + + <div class="col-4of12"> + <h5> + Feedback e suporte + </h5> + + <p> + Informe problemas e dê-nos feedback usando o <a href="https://code.google.com/p/android-developer-preview/">issue tracker</a>. + Conecte-se a outros desenvolvedores na <a href="http://g.co/dev/AndroidMDevPreview">Comunidade M Developer</a>. + + </p> + </div> + </div> +</div> +</div> + +<!-- +<p> + With the M Developer Preview, you'll get an early start on testing your apps, + with enough time to make adjustments before the public platform release later + in the year. We'll provide several updates to the Preview tools in the weeks + ahead, so you can keep in sync with the latest changes as the platform moves + toward launch. +</p> +<img src="{@docRoot}preview/images/m-preview-timeline.png" alt= +"Preview program timeline" id="timeline"> +<p> + You can help us improve the platform by <a href= + "https://code.google.com/p/android-developer-preview/">reporting issues</a> + through our feedback channels. This is especially + critical in the first month of the preview, when we’ll be giving priority to + developer-reported issues and feedback. +</p> --> + + +<h2 id="timeline"> + Linha do tempo e atualizações +</h2> +<img src="{@docRoot}preview/images/m-preview-timeline-crop.png" alt="Preview program timeline" id="timeline"> +<p> + O M Developer Preview estará em execução de 28 de maio até o Android M SDK final, que + disponibilizaremos brevemente antes do lançamento público durante + o 3º trimestre de 2015. +</p> + +<p> + Nos marcos de desenvolvimento principais, entregamos atualizações para os dispositivos de teste. + Os marcos de experiência são +</p> + +<ul> + <li> + <strong>Preview 1</strong> (lançamento inicial do Preview, final de maio), + </li> + + <li> + <strong>Preview 2</strong> (final de junho/início de julho) e + </li> + + <li> + <strong>Preview 3</strong> (próximo ao final de julho) + </li> +</ul> + +<p> + Estas atualizações culminam no <strong>SDK final</strong> (no 3º trimestre), + que fornecerá APIs oficiais para a nova versão do Android, + bem como os recursos e comportamentos do sistema final. +</p> + +<p> + Ao testar e desenvolver no Android M, recomendamos que você <strong>mantenha + o ambiente de desenvolvimento atualizado</strong> à medida que atualizações do Preview são lançadas. + Para facilitar o processo, fornecemos <strong>atualizações "over-the-air" + (OTA)</strong> aos dispositivos já programados em flash para uma versão do Preview, além + de fornecemos imagens do sistema que estão disponíveis para download e programação em flash manualmente. +</p> +<p class="note"> + <strong>Observação:</strong> as imagens do sistema e o SDK final não podem ser entregues + por OTA. Em vez disso, precisarão ser <strong>programadas em flash manualmente</strong> para + os dispositivos de teste.</strong> +</p> + +<p> + Notificaremos você quando as atualizações do Preview estiverem disponíveis por meio do <a href="http://android-developers.blogspot.com/">Blogue de desenvolvedores do Android</a>, além + deste site + e da <a href="http://g.co/dev/AndroidMDevPreview">Comunidade Android M Developer</a>. +</p> + +<h2 id="preview_tools"> + O que há no Preview? +</h2> + +<p> + O M Developer Preview inclui tudo que é necessário para testar os aplicativos existentes + em uma variedade de tamanhos de tela, tecnologias de rede, chipsets de CPU/GPU + e arquiteturas de hardware. +</p> + +<h4> + Ferramentas SDK +</h4> + +<p> + É possível fazer o download destes componentes pelo SDK Manager no <a href="{@docRoot}sdk/installing/adding-packages.html">Android Studio</a>: +</p> + +<ul> + <li>M Developer Preview <strong>ferramentas SDK</strong> + </li> + + <li>M Developer Preview <strong>imagem do sistema de emulador</strong> (32 bits +e 64 bits) + </li> + + <li>M Developer Preview <strong>imagem do sistema de emulador para Android TV</strong> + (32 bits) + </li> +</ul> + +<h4> + Imagens do sistema de hardware +</h4> + +<p> + É possível fazer o download destas imagens de sistema de hardware para dispositivos Nexus a partir + da <a href="download.html">página de download</a>: +</p> + +<ul> + <li> + <strong>Nexus 5</strong> (GSM/LTE) imagem do sistema de dispositivo “hammerhead” + </li> + + <li> + <strong>Nexus 6</strong> imagem do sistema de dispositivo “shamu” + </li> + + <li> + <strong>Nexus 9</strong> (Wi-Fi) imagem do sistema de dispositivo “volantis” + </li> + + <li> + <strong>Nexus Player</strong> (Android TV) imagem do sistema de dispositivo “fugu” + </li> +</ul> + +<h4> + Exemplo de código e documentação +</h4> + +<p> + Estes recursos de documentação ajudam você a aprender sobre o Preview: +</p> + +<ul> + <li> + <a href="setup-sdk.html">Configuração do SDK</a> tem instruções passo a passo + para você começar. + </li> + + <li> + <a href="{@docRoot}preview/testing/guide.html">Guia de teste</a> e <a href="behavior-changes.html">Mudanças de comportamento</a> mostram as áreas essenciais para o teste. + </li> + + <li>Documentação de novas APIs, incluindo uma <a href="api-overview.html">Visão geral das APIs</a>, + <a href="{@docRoot}preview/download.html#docs">Referência da API</a> disponível para download e guias de desenvolvedor detalhados sobre + os recursos principais, como + <a href="{@docRoot}preview/features/runtime-permissions.html">permissões</a>, + <a href="{@docRoot}preview/backup/index.html">backup de aplicativo</a> etc. + </li> + + <li> + <a href="{@docRoot}preview/samples.html">Exemplo de código</a> que demonstra como suportar + permissões e outros novos recursos. + </li> + + <li> + <a href="{@docRoot}preview/support.html#release-notes">Notas de versão</a> para a versão atual do + M Developer Preview, incluindo notas de mudanças e relatórios de diferença. + </li> +</ul> + +<h4> + Recursos de suporte +</h4> + +<p> + Use estes recursos de suporte ao testar e desenvolver no + M Developer Preview: +</p> + +<ul> + <li>O <a href="https://code.google.com/p/android-developer-preview/">Issue Tracker do M + Developer Preview</a> é o <strong>canal principal + de feedback.</strong> É possível informar erros, problemas de desempenho e feedback + geral pelo issue tracker. Também é possível verificar os <a href="https://code.google.com/p/android-developer-preview/wiki/KnownIssues">erros conhecidos</a> + e encontrar etapas de resolução. + </li> + + <li>A <a href="http://g.co/dev/AndroidMDevPreview">Comunidade Android M Developer +</a> é uma comunidade do Google+ onde é possível <strong>se conectar + a outros desenvolvedores</strong> que trabalham com o Android M. É possível compartilhar + observações ou ideias, além de encontrar respostas para as dúvidas sobre o Android M. + </li> +</ul> + + +<h2 id="preview_apis_and_publishing"> + Destinação, APIs de prévia e publicação +</h2> + +<p> + O Android M Developer Preview é uma versão apenas para desenvolvimento + e <strong>não possui um nível da API padrão</strong>. Caso opte + pelos comportamentos de compatibilidade para testar o aplicativo (o que é muito recomendado), + é possível destinar o M Developer Preview configurando o <code><a href= + "/guide/topics/manifest/uses-sdk-element.html">targetSdkVersion</a></code> + do aplicativo para <code>“MNC”</code>. +</p> + +<p> + O Android M Developer Preview fornece <strong>APIs de prévia</strong> + — as APIs não serão oficiais até o lançamento do SDK final, + atualmente planejado para o terceiro trimestre de 2015. Isto significa que é possível + <strong>esperar alterações secundárias de APIs</strong> com o tempo, especialmente + durante as semanas iniciais do programa. Forneceremos um resumo das alterações + com cada atualização do Android M Developer Preview. +</p> + +<p class="note"> + Observe que, apesar das APIs da prévia poderem ser alteradas, os comportamentos essenciais do sistema, + como permissões de tempo de execução e recursos de economia de energia, são estáveis e estão prontos + para serem testados. +</p> + +<p> + Em termos de publicação, o Google Play <strong>evita a publicação de aplicativos + destinados para o M Developer Preview</strong>. Quando o SDK final do Android M estiver + disponível, você poderá destinar o nível da API do Android M oficial + e publicar o aplicativo no Google Play. Enquanto isso, caso queira distribuir um aplicativo + destinado para Android M para testadores, é possível fazê-lo por e-mail ou por download direto + a partir do site. +</p> + +<h2 id="get_started"> + Como começar +</h2> + +<p> + Para começar o teste do aplicativo: +</p> + +<ol> + <li>Revise a <a href="{@docRoot}preview/api-overview.html">Visão geral da API</a> + e as <a href="{@docRoot}preview/behavior-changes.html">Mudanças de comportamento</a> para + ter uma ideia do que há de novo e como isto afeta os aplicativos. Em particular, aprenda mais sobre + o novo modelo<a href="{@docRoot}preview/features/runtime-permissions.html">de permissões + de tempo de execução</a>, recursos de economia de energia e backup automático. + </li> + + <li>Configure o ambiente seguindo as instruções para + <a href="{@docRoot}preview/setup-sdk.html">Configurar o Preview SDK</a> + e ajustar os dispositivos de teste. + </li> + + <li>Siga <a href="https://developers.google.com/android/nexus/images"> + as instruções de programação em flash</a> para programar em flash a imagem do sistema do M Developer Preview mais recente + para Nexus 5, 6, 9 e Player. Após programar em flash o dispositivo de desenvolvimento, + as atualizações do Preview serão entregues por atualizações OTA (over-the-air).</a> + </li> + + <li>Faça o download da <a href="{@docRoot}preview/download.html#docs">Referência da API do + M Preview</a> e dos <a href="{@docRoot}preview/samples.html">exemplos do M Preview +</a> para obter mais informações sobre os novos recursos de API e como usá-los + no aplicativo. + </li> + + <li>Junte-se à <a href="http://g.co/dev/AndroidMDevPreview">Comunidade Android M + Developer</a> para obter as notícias mais recentes e conecte-se a outros + desenvolvedores que trabalham com a nova plataforma. + </li> +</ol> + +<p> + Agradecemos a sua participação no programa M Developer Preview do Android! +</p> |