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](https://developer.android.google.cn/static/images/android-6.0/fingerprint-screen.png?authuser=0000&hl=pt)
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:
- Instale o Android SDK Tools Revision 24.3, caso ainda não tenha instalado.
- Registre uma nova impressão digital no emulador acessando Configurações > Segurança > Impressão digital e siga as instruções de registro.
- 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 definger 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](https://developer.android.google.cn/static/images/android-6.0/direct-share-screen.png?authuser=0000&hl=pt)
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:
- Implemente a interface
Application.OnProvideAssistDataListener
. - Registre esse listener usando
registerOnProvideAssistDataListener()
: - Para fornecer informações contextuais específicas da atividade, substitua o elemento
onProvideAssistData()
de retorno de chamada e, opcionalmente, a novaonProvideAssistContent()
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.
Context
métodos:- Campos
ApplicationInfo
:
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:
- Novo nível de filtro
INTERRUPTION_FILTER_ALARMS
que corresponde ao novo modo Não perturbe Somente alarmes. - Novo valor de categoria
CATEGORY_REMINDER
usado para distinguir lembretes programados pelo usuário de outros eventos (CATEGORY_EVENT
) e alarmes (CATEGORY_ALARM
). - Nova turma
Icon
que você pode anexar às suas notificações por meio dosetSmallIcon()
esetLargeIcon()
métodos. Da mesma forma, O métodoaddAction()
agora aceita um objetoIcon
em vez de um ID de recurso drawable. - O novo método
getActiveNotifications()
, que permite que para descobrir quais notificações ainda estão ativas.
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:
- Se o usuário tocar em uma stylus com um botão na tela do app, o
O método
getTooltype()
retornaTOOL_TYPE_STYLUS
. - Para aplicativos destinados ao Android 6.0 (nível 23 da API), os
getButtonState()
método retornaBUTTON_STYLUS_PRIMARY
quando o usuário pressiona o botão principal da stylus. Se a stylus tiver um segundo botão, o mesmo método retornaráBUTTON_STYLUS_SECONDARY
quando o usuário o pressiona. Se o usuário pressionar os dois botões simultaneamente, o método retorna os dois valores com OR juntos (BUTTON_STYLUS_PRIMARY
|BUTTON_STYLUS_SECONDARY
). -
Para aplicativos destinados a uma versão de plataforma anterior, o
O método
getButtonState()
retornaBUTTON_SECONDARY
(ao pressionar o botão principal da stylus),BUTTON_TERTIARY
(ao pressionar o botão secundário da stylus) ou ambos.
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
eAudioTrack.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 objetoInputDevice
desse callback e chame o novo métodohasMicrophone()
. - 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 ObjetoAudioDeviceCallback
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:
- Chame o método
dequeueInputImage()
. - Preencha os dados no buffer de entrada.
- 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):
- Desative ou reative o bloqueio de teclado com a
setKeyguardDisabled()
. - Desative ou reative a barra de status (incluindo configurações rápidas, notificações e o botão
gesto de deslizar para cima que inicia o Google Now) com o
setStatusBarDisabled()
. - Desativar ou reativar a inicialização segura com a constante
UserManager
DISALLOW_SAFE_BOOT
. - Evite que a tela desligue quando conectada ao
STAY_ON_WHILE_PLUGGED_IN
.
- Desative ou reative o bloqueio de teclado com a
- 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 chamaronChoosePrivateKeyAlias()
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: - 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.
![Dispositivo móvel exibindo o recurso de notificação de status de trabalho no Android for Work](https://developer.android.google.cn/static/images/android-6.0/work-profile-screen.png?authuser=0000&hl=pt)