APIs do Android 6.0

Android 6.0 (M) oferece novos recursos para usuários e desenvolvedores de apps. Este documento apresenta uma introdução ao as APIs mais importantes.

Começar a desenvolver

Para começar a criar aplicativos para o Android 6.0, você deve primeiro obter SDK do Android. Em seguida, use o SDK Manager para fazer o download da plataforma SDK do Android 6.0 e das imagens do sistema.

Atualização do nível da API

Para otimizar seu app em dispositivos com Android , defina targetSdkVersion como "23", instale seu app em um dispositivo Android imagem do sistema, testar e publicar o app atualizado com essa mudança.

Você pode usar as APIs do Android e, ao mesmo tempo, oferecer suporte versões adicionando condições ao seu código que verificam o nível da API do sistema antes de executar APIs sem suporte da minSdkVersion. Para saber mais sobre como manter a compatibilidade com versões anteriores, leia Suporte Diferentes Versões de Plataforma.

Para mais informações sobre como os níveis de API funcionam, leia O que é a API Nível?

Autenticação com impressão digital

Esta versão oferece novas APIs para autenticar usuários usando digitalizações de impressões digitais no dispositivos compatíveis, use essas APIs em conjunto com o sistema Android Keystore.

Para autenticar usuários com a leitura de impressão digital, receba uma instância do novo a classe FingerprintManager e chamar a função authenticate() . Seu app precisa ser executado em um dispositivo compatível do dispositivo com sensor de impressão digital. Implemente a interface do usuário para a impressão digital fluxo de autenticação no app e usar o ícone de impressão digital padrão do Android na interface. O ícone de impressão digital do Android (c_fp_40px.png) está incluído no Amostra de autenticação biométrica. Se você estiver desenvolvendo vários aplicativos que usam autenticação por impressão digital, observe que cada aplicativo deve autenticar a impressão digital do usuário de forma independente.

Para usar esse recurso no app, primeiro adicione o USE_FINGERPRINT no manifesto.

<uses-permission
        android:name="android.permission.USE_FINGERPRINT" />
Dispositivo móvel mostrando a funcionalidade de autenticação por impressão digital

Para ver a implementação de um aplicativo de autenticação por impressão digital, consulte Exemplo de autenticação biométrica. Para uma demonstração de como você pode usar essas com outras APIs do Android, assista ao vídeo APIs de impressão digital e pagamento.

Se estiver testando esse recurso, siga estes passos:

  1. Instale o Android SDK Tools Revision 24.3, caso ainda não tenha instalado.
  2. Registre uma nova impressão digital no emulador acessando Configurações > Segurança > Impressão digital e siga as instruções de registro.
  3. Use um emulador para emular eventos de toque de impressão digital 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 seu app.
    adb -e emu finger touch <finger_id>
    

    No Windows, talvez seja necessário executar telnet 127.0.0.1 <emulator-id> seguido de finger touch <finger_id>.

Confirmação de credencial

O aplicativo pode autenticar os usuários com base no quão recentemente o dispositivo foi desbloqueado pela última vez. Isso libera os usuários de ter que lembrar de senhas específicas de aplicativos adicionais e evita a necessidade para você implementar sua própria interface do usuário de autenticação. O app precisa usar esse recurso junto com uma implementação de chave pública ou secreta para a autenticação do usuário.

Para definir o tempo limite em que a mesma chave pode ser reutilizada após um usuário ser bem-sucedido autenticado, chame a nova setUserAuthenticationValidityDurationSeconds() quando você configura um KeyGenerator ou KeyPairGenerator

Evite mostrar excessivamente a caixa de diálogo de reautenticação. Seus aplicativos devem tentar usar o objeto criptográfico primeiro e, se o tempo limite expirar, use o método createConfirmDeviceCredentialIntent() para reautenticar o usuário no seu app.

Vinculação de app

Esta versão aprimora o sistema de intent do Android fornecendo vínculo mais poderoso com o aplicativo. Este recurso permite que você associe um aplicativo a um domínio web próprio. Com base neste associação, a plataforma pode determinar o aplicativo padrão a ser usado para lidar com um determinado e não precisa solicitar que os usuários selecionem um aplicativo. Para aprender a implementar esse recurso, consulte Como processar links de apps.

Backup automático para aplicativos

O sistema agora realiza backup automático completo e restauração de dados para aplicativos. O app precisa segmentar Android 6.0 (API de nível 23) para ativar esse comportamento; não é preciso adicionar mais códigos. Se os usuários excluírem as contas Google, os dados de backup também serão excluídos. Para saber como isso funciona e como configurar o backup no sistema de arquivos, consulte Como configurar o Backup automático para apps.

Compartilhamento direto

Parte inferior de um dispositivo móvel exibindo o recurso de compartilhamento direto

Esta versão fornece APIs para tornar o compartilhamento intuitivo e rápido para os usuários. Agora é possível defina destinos de compartilhamento direto que iniciam uma atividade específica no seu app; Essas empresas compartilham diretamente são expostos aos usuários no menu Compartilhar. Esse recurso permite que os usuários compartilhem conteúdo para destinos, como contatos, em 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 conteúdo diretamente com uma um amigo ou uma comunidade específica no app.

Para ativar os alvos de compartilhamento direto, você deve definir uma classe que estenda o ChooserTargetService. Declare sua serviço no manifesto. Nessa declaração, especifique BIND_CHOOSER_TARGET_SERVICE e uma permissão filtro de intent usando o SERVICE_INTERFACE.

O exemplo a seguir mostra como declarar o ChooserTargetService no manifesto.

<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>

Para cada atividade à qual você quer expor ChooserTargetService, adicione um Elemento <meta-data> com o nome "android.service.chooser.chooser_target_service" no manifesto do app.

<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>

Interações por voz

Esta versão fornece uma nova API de interação por voz que, junto com Comandos de voz permite criar experiências de conversação nos apps. Chame o método Método isVoiceInteraction() para determinar se uma ação de voz foi acionada sua atividade. Nesse caso, seu app pode usar o Classe VoiceInteractor para solicitar uma confirmação por voz do usuário, selecione em uma lista de opções e muito mais.

A maioria das interações por voz tem origem em um comando de voz do usuário. Uma atividade de interação por voz pode mas comece sem entradas do usuário. Por exemplo, outro app iniciado por uma voz de interação também pode enviar uma intent para iniciar uma interação por voz. Para determinar se sua atividade iniciado a partir de uma consulta de voz do usuário ou de outro aplicativo de interação de voz, chame o método isVoiceInteractionRoot(). Se outro app iniciou sua atividade, o método retornará false. O app pode pedir que o usuário confirme se essa ação era intencional.

Para saber mais sobre a implementação de comandos de voz, consulte a Site para desenvolvedores de Ações de voz.

Assist API

Essa versão oferece uma nova maneira de os usuários se envolverem com os aplicativos usando um assistente. Para usar isso, o usuário precisa permitir que o assistente use o contexto atual. Após a ativação, o usuário pode invocar o Assistente em qualquer app. É só tocar e manter pressionado o botão Home.

Seu app pode optar por não compartilhar o contexto atual com o assistente definindo o sinalização FLAG_SECURE. Além da seção conjunto padrão de informações que a plataforma passa para o assistente, seu app pode compartilhar mais informações usando a nova classe AssistContent.

Para fornecer contexto adicional do aplicativo ao assistente, siga estes passos:

  1. Implemente a interface Application.OnProvideAssistDataListener.
  2. Registre esse listener usando registerOnProvideAssistDataListener():
  3. Para fornecer informações contextuais específicas da atividade, substitua o elemento onProvideAssistData() de retorno de chamada e, opcionalmente, a nova onProvideAssistContent() o retorno de chamada.

Dispositivos de armazenamento adotáveis

Com ela, os usuários podem adotar dispositivos de armazenamento externo, como cartões SD. Adotar uma o dispositivo de armazenamento externo criptografa e formata o dispositivo para agir como um armazenamento interno. Isso permite que os usuários movam aplicativos e dados privados desses aplicativos entre dispositivos de armazenamento. Quando para mover apps, o sistema respeita android:installLocation preferência no manifesto.

Caso seu app acesse as APIs ou os campos a seguir, saiba que os caminhos de arquivo retornados por eles mudará dinamicamente quando o app for movido entre dispositivos de armazenamento interno e externo. Ao compilar caminhos de arquivo, recomendamos que essas APIs sempre sejam chamadas dinamicamente. Não use caminhos de arquivo criptografados nem persista em caminhos de arquivo totalmente qualificados que foram compilados anteriormente.

Para depurar esse recurso, ative a adoção de um drive USB que esteja conectado a um dispositivo Android por um cabo USB On-The-Go (OTG) executando este comando:

$ adb shell sm set-force-adoptable true

Notificações

Esta versão adiciona as seguintes mudanças de API para notificações:

Compatibilidade com Bluetooth Stylus

Esta versão oferece compatibilidade melhorada com entradas do usuário usando um Bluetooth Stylus. Os usuários podem parear e conectar uma stylus Bluetooth compatível com o smartphone ou tablet. Quando conectado, posicione as informações da tela sensível ao toque são fundidas com as informações de pressão e botão da stylus para fornecem uma gama maior de expressão do que com apenas a tela sensível ao toque. Seu app pode detectar pressiona o botão da stylus e realiza ações secundárias registrando View.OnContextClickListener e GestureDetector.OnContextClickListener na sua atividade.

Usar os métodos e as constantes do MotionEvent para detectar o botão da stylus interações:

Análise aprimorada de Bluetooth Low Energy

Se o app realiza buscas por Bluetooth de baixa energia, use a nova setCallbackType() para especificar que você deseja que o sistema notifique os retornos de chamada quando encontrar pela primeira vez ou vê após um muito tempo, um pacote de divulgação correspondendo ao conjunto ScanFilter. Isso de leitura é mais eficiente do que a oferecida na versão anterior da plataforma.

Compatibilidade com Hotspot 2.0 versão 1

Esta versão adiciona compatibilidade com Hotspot 2.0 versão 1 para os dispositivos Nexus 6 e Nexus 9. Para provisionar credenciais de Hotspot 2.0 em seu aplicativo, use os novos métodos do classe WifiEnterpriseConfig, como setPlmn() e setRealm() Na objeto WifiConfiguration, é possível definir FQDN e o Campos providerFriendlyName. O novo método isPasspointNetwork() indica se uma representa um ponto de acesso Hotspot 2.0.

Modo de exibição em 4K

A plataforma agora permite que apps solicitem o upgrade da resolução da tela para 4K em hardwares compatíveis. Para consultar a resolução física atual, use a nova APIs do Display.Mode. Se a interface do usuário for desenhada em uma resolução lógica menor e ampliada para uma resolução física maior, saiba que a resolução física que Os retornos do método getPhysicalWidth() podem ser diferentes do método lógico resolução informada por getSize().

Você pode solicitar que o sistema altere a resolução física no aplicativo durante a execução configurando a propriedade preferredDisplayModeId da propriedade janela. Esse recurso é útil se você quiser alternar para a resolução de exibição em 4K. Em tela 4K a interface continua sendo renderizada na resolução original (como 1080p) e é ampliada para 4K, mas os objetos SurfaceView podem mostrar conteúdo em resolução nativa.

ColorStateLists com tema

Os atributos de tema agora têm suporte no ColorStateList para dispositivos com o Android 6.0 (nível 23 da API). A Resources.getColorStateList() e Resources.getColor() métodos foram descontinuada. Se você estiver chamando essas APIs, chame a nova função Context.getColorStateList() ou Context.getColor(). Esses métodos são também está disponível na Biblioteca appcompatibilidade v4 via ContextCompat.

Recursos de áudio

Esta versão adiciona melhorias ao processamento de áudio no Android, incluindo:

  • Compatibilidade com MIDI com as novas APIs android.media.midi. Usar estas APIs para enviar e receber MIDI eventos.
  • Novos AudioRecord.Builder e AudioTrack.Builder para criar captura de áudio digital e objetos de reprodução, respectivamente, e configurar o áudio origem e do coletor para substituir os padrões do sistema.
  • Ganchos de API para a associação de dispositivos de entrada e áudio. Isso é muito útil se o seu app permite que os usuários iniciem uma pesquisa por voz a partir de um controle de jogo ou controle remoto conectado ao Android TV. O sistema invoca o novo onSearchRequested() de retorno de chamada quando o usuário inicia a pesquisa. Para determinar se o dispositivo de entrada do usuário tem um microfone, extraia o objeto InputDevice desse callback e chame o novo método hasMicrophone().
  • Com o novo método getDevices(), recuperar uma lista de todos os dispositivos de áudio atualmente conectados ao sistema. Você também pode registrar um Objeto AudioDeviceCallback se você quiser que o sistema notifique seu app quando um dispositivo de áudio é conectado ou desconectado.

Recursos de vídeo

Esta versão adiciona novos recursos às APIs de processamento de vídeo, incluindo:

  • Nova classe MediaSync, que ajuda os aplicativos a renderizar de forma síncrona streams de áudio e vídeo. Os buffers de áudio são enviados sem bloqueio e retornados por um callback. Eles também suportam a taxa de reprodução dinâmica.
  • Novo evento EVENT_SESSION_RECLAIMED, que indica que uma a sessão aberta pelo app foi recuperada pelo gerenciador de recursos. Caso seu app use sessões de DRM, você deve manipular esse evento e se certificar de não usar uma sessão recuperada.
  • Novo código de erro ERROR_RECLAIMED, que indica que o gerenciador de recursos tenha recuperado o recurso de mídia usado pelo codec. Com essa exceção, os o codec deve ser liberado, pois foi movido para o estado terminal.
  • Nova interface getMaxSupportedInstances() para receber uma dica sobre o número máximo dos elementos instâncias de codec simultâneas.
  • O novo método setPlaybackParams() para definir a velocidade de reprodução de mídia de modo rápido ou a reprodução em câmera lenta. Ele também alonga ou acelera a reprodução de áudio automaticamente em junto com o vídeo.

Recursos da câmera

Esta versão inclui as seguintes novas APIs para acessar a lanterna da câmera e para reprocessamento da câmera de imagens:

Flashlight API

Se um dispositivo de câmera tiver uma unidade de flash, é possível chamar o método setTorchMode() para ativar ou desativar o modo de tocha da unidade de flash sem abrir o dispositivo da câmera. O app não tem propriedade exclusiva da unidade de flash ou do dispositivo de câmera. O modo de tocha está ativado desativada e fica indisponível sempre que a câmera ou o dispositivo de outra câmera os recursos que mantêm a lanterna ativada ficam indisponíveis. Outros apps também podem ligar setTorchMode() para desativar o modo tocha. Quando o último app que ativou o modo de tocha é fechado, a lanterna estiver desativado.

É possível registrar um callback para receber uma notificação sobre o status da lanterna chamando registerTorchCallback() . Na primeira vez que o callback é registrado, ele é imediatamente chamado com o modo de tocha o status de todos os dispositivos de câmera conhecidos atualmente com uma unidade de flash. Se o modo lanterna estiver ativado ou a operação off-line, onTorchModeChanged() é invocado.

Reprocessing API

A API Camera2 foi estendida para oferecer suporte a YUV e particulares reprocessamento de imagem em formato opaco. Para determinar se esses recursos de reprocessamento estão disponíveis, chamar getCameraCharacteristics() e verificar os Tecla REPROCESS_MAX_CAPTURE_STALL. Se um dispositivo suporta reprocessamento, você pode criar uma sessão de captura de câmera reprocessável chamando createReprocessableCaptureSession(), e cria solicitações para o reprocessamento do buffer de entrada.

Usar a classe ImageWriter para conectar o fluxo do buffer de entrada à câmera reprocessamento de entrada. Para obter um buffer vazio, siga este modelo de programação:

  1. Chame o método dequeueInputImage().
  2. Preencha os dados no buffer de entrada.
  3. Envie o buffer à câmera chamando queueInputImage().

Se você estiver usando um objeto ImageWriter junto com um PRIVATE imagem, seu app não pode acessar a imagem os dados diretamente. Em vez disso, transmita a imagem PRIVATE diretamente para o ImageWriter chamando a função Método queueInputImage() sem nenhuma cópia de buffer.

A classe ImageReader agora oferece suporte Streams de imagens no formato PRIVATE. Esse suporte permite que o app mantenha uma fila de imagens circulares de ImageReader imagens de saída, selecione uma ou mais imagens e as enviar ao ImageWriter para reprocessamento da câmera.

Recursos do Android for Work

Esta versão inclui as seguintes novas APIs Android for Work:

  • Controles aprimorados para dispositivos corporativos de uso único:o proprietário do dispositivo agora pode controlar as seguintes configurações para melhorar o gerenciamento Dispositivos corporativos de uso único (COSU):
  • Instalação e desinstalação silenciosa de apps pelo proprietário do dispositivo:o proprietário do dispositivo agora pode instalar e desinstalar aplicativos silenciosamente usando a PackageInstaller; APIs do Google, independentes do Google Play for Work. Agora é possível provisionar dispositivos por meio de um proprietário do dispositivo que busca e instala apps sem interação do usuário. Esse recurso é útil para ativar a comunicação provisionamento de quiosques ou outros dispositivos sem ativar uma Conta do Google.
  • Acesso silencioso ao certificado empresarial : quando um app chama choosePrivateKeyAlias(), antes de o usuário ser solicitado a selecionar um certificado, o perfil ou proprietário do dispositivo agora pode chamar onChoosePrivateKeyAlias() para fornecer o alias silenciosamente ao aplicativo solicitante. Com esse recurso, você concede o acesso de apps gerenciados a certificados sem a interação do usuário.
  • Aceitação automática de atualizações do sistema. Ao definir uma política de atualização do sistema com setSystemUpdatePolicy(), o proprietário do dispositivo agora pode aceitar automaticamente um sistema por exemplo, no caso de um dispositivo de quiosque, ou adiar a atualização e impedir que ela seja feito pelo usuário em até 30 dias. Além disso, um administrador pode definir uma janela de tempo diária quando uma atualização precisa ser feita, por exemplo, durante as horas em que um dispositivo de quiosque não está em uso. Quando uma atualização do sistema estiver disponível, o sistema verificará se o aplicativo controlador de política do dispositivo definiu um sistema update e se comporta de forma adequada.
  • Instalação de certificado delegado:agora um proprietário de dispositivo ou perfil pode conceder uma app de terceiros a capacidade de chamar esses certificados DevicePolicyManager APIs de gerenciamento de identidade e acesso:
  • Dispositivo móvel exibindo o recurso de notificação de status de trabalho no Android for Work
  • Rastreamento de uso de dados. Um proprietário de dispositivo ou perfil agora pode consultar a estatísticas de uso de dados visíveis em Configurações > uso de dados com a nova NetworkStatsManager. Proprietários de perfil recebem automaticamente permissão para consultar dados no perfil que gerenciam, e os proprietários do dispositivo têm acesso aos dados de uso do usuário principal gerenciado.
  • Gerenciamento de permissões no ambiente de execução:

    Um proprietário de dispositivo ou perfil pode definir uma política de permissão para todas as solicitações do ambiente de execução de todos os aplicativos usando setPermissionPolicy(), para solicitar que o usuário conceda a permissão ou conceder ou negar a permissão silenciosamente. Se a última política for definida, o usuário não poderá modificar a seleção feita pelo perfil ou proprietário do dispositivo na tela de permissões do aplicativo Configurações.

  • VPN nas configurações:os apps de VPN agora estão visíveis em Configurações > Mais > VPN. Além disso, as notificações que acompanham o uso da VPN agora são específicas sobre como essa VPN é configurada. Para o Proprietário do perfil, as notificações são específicas para indicar se a VPN está configurada para um perfil gerenciado, um perfil pessoal ou ambos. Para o proprietário do dispositivo, as notificações são específico para determinar se a VPN está configurada para todo o dispositivo.
  • Notificação de status de trabalho: um ícone de pasta na barra de status agora aparece sempre que um app do perfil gerenciado tiver uma atividade em primeiro plano. Além disso, se o dispositivo for desbloqueado diretamente para a atividade de um app no perfil gerenciado, um aviso é exibido ao usuário que eles estão no perfil de trabalho.