API de nível: 21
Android 5.0 (LOLLIPOP) oferece novos recursos para usuários e desenvolvedores de apps. Este documento oferece uma uma introdução às novas APIs mais notáveis.
Se você tiver um aplicativo publicado, consulte a documentação Comportamento do Android 5.0 Mudanças que você precisa considerar no app. Essas mudanças de comportamento pode afetar seu aplicativo em dispositivos Android 5.0, mesmo que você não esteja usando novas APIs ou segmentação de novas funcionalidades.
Para uma análise mais detalhada dos novos recursos da plataforma, em vez consulte Android Lollipop destaques.
Começar a desenvolver
Para começar a criar aplicativos para o Android 5.0, você deve primeiro obter SDK do Android. Em seguida, use o SDK Manager para fazer o download da plataforma SDK do Android 5.0 e das imagens do sistema.
Atualização do nível da API
Para otimizar seu app para dispositivos com o Android 5.0, faça o seguinte:
defina targetSdkVersion
como
"21"
, instale seu app em um dispositivo Android
imagem do sistema 5.0, testar e publicar o app atualizado com
essa mudança.
Você pode usar as APIs do Android 5.0 e, ao mesmo tempo, oferecer compatibilidade com
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?
Mudanças de comportamento importantes
Caso tenha publicado anteriormente um aplicativo para Android, saiba que ele pode ser afetado pelas alterações no Android 5.0.
Consulte Mudanças no Android 5.0 para ver as informações completas.
Interface do usuário
Compatibilidade com Material Design
O Android 5.0 adiciona suporte ao novo Material Design do Android estilo. É possível criar aplicativos com o Material Design que são visualmente dinâmicos e têm transições de elementos da IU que parecem naturais para os usuários. Essa compatibilidade inclui:
- O tema do Material
- Sombras de visualizações
- O widget
RecyclerView
- Animação de desenháveis e efeitos de estilo
- Animação do Material Design e efeitos de transição de atividade
- Animadores para propriedades de visualização com base no estado da visualização
- Widgets de IU personalizáveis e barras de aplicativos com paletas de cores controláveis
- Desenháveis animados e não animados com base em gráficos de vetor XML
Para saber mais sobre como adicionar a funcionalidade do Material Design ao seu aplicativo, consulte Material Design.
Documentos e atividades simultâneos na tela Recentes
Em versões anteriores, a
tela Recentes
só podiam mostrar uma tarefa para cada app com o qual o usuário interagiu
mais recentemente. Agora seu app pode abrir mais tarefas, conforme necessário, para
atividades simultâneas para documentos. Esse recurso facilita a realização de várias tarefas ao mesmo tempo,
permitindo que os usuários alternem rapidamente entre atividades individuais e documentos de
na tela Recentes, com uma experiência de troca consistente em todos os aplicativos.
Exemplos de tais tarefas simultâneas podem incluir guias abertas em um site
aplicativo de navegador, documentos em um aplicativo de produtividade, correspondências simultâneas em
um jogo ou conversas em um app de mensagens. Seu app pode gerenciar as tarefas
usando a classe ActivityManager.AppTask
.
Inserir uma quebra lógica para que o sistema trate sua atividade como uma nova atividade.
tarefa, use FLAG_ACTIVITY_NEW_DOCUMENT
quando
iniciando a atividade com startActivity()
. Você também pode conseguir esse comportamento definindo o
<atividade>
atributo documentLaunchMode
do elemento para "intoExisting"
ou
"always"
no manifesto.
Para evitar sobrecarregar a tela Recentes, você pode definir o número máximo de
tarefas do seu app que podem aparecer nessa tela. Para fazer isso, defina o
<aplicativo>
atributo android:maxRecents
. O estado atual
o máximo que pode ser especificado é de 50 tarefas por usuário (25 para dispositivos com pouca RAM).
Tarefas na tela Recentes podem ser definidas para persistir em reinicializações. Para controlar
o comportamento de persistência, use o
android:persistableMode (link em inglês)
. Também é possível alterar
propriedades visuais de uma atividade na tela Recentes, como
a cor, o marcador e o ícone da atividade chamando
setTaskDescription()
.
Atualizações do WebView
O Android 5.0 atualiza a WebView
.
no Chromium M37, trazendo melhorias de segurança e estabilidade,
bem como correções de bugs. A string do user agent padrão de um
A WebView
executada no Android 5.0 tem
foi atualizado para incorporar 37.0.0.0 como o número da versão.
Esta versão introduz a classe PermissionRequest
,
que permite que o app conceda a permissão WebView
acessar recursos protegidos, como a câmera e o microfone, por meio de APIs da Web
como getUserMedia(). Seu app precisa ter as permissões
permissões do Android para esses recursos para conceder as permissões ao
WebView
.
Com o novo método onShowFileChooser()
,
Agora você pode usar um campo de formulário de entrada na WebView
,
e inicie um seletor de arquivos para selecionar imagens e arquivos do dispositivo Android.
Além disso, esta versão traz suporte para o WebAudio e WebGL e WebRTC, um padrão aberto. Para saber mais sobre os novos recursos incluídos nessa versão, consulte WebView para Android.
Captura e compartilhamento de tela
O Android 5.0 permite adicionar recursos de captura e compartilhamento de tela ao
seu app com as novas APIs android.media.projection
. Essa funcionalidade
é útil, por exemplo, para ativar o compartilhamento de tela em um vídeo
de videoconferência.
O novo método createVirtualDisplay()
permite que o app capture o conteúdo da tela principal (o padrão
exibir) em um objeto Surface
, que o app pode
para enviar pela rede. A API só permite a captura de telas não seguras
e não o áudio do sistema. Para iniciar a captura de tela, primeiro o app precisa
solicitar a permissão do usuário iniciando uma caixa de diálogo de captura de tela usando um
Intent
recebido pelo
createScreenCaptureIntent()
.
Para conferir um exemplo de como usar as novas APIs, consulte a MediaProjectionDemo
no projeto de exemplo.
Notificações
Notificações na tela de bloqueio
As telas de bloqueio no Android 5.0 podem apresentar notificações. Nas Configurações, os usuários podem escolher se querem permitir conteúdo confidencial de notificações seja exibido por meio de uma tela de bloqueio segura.
Seu app pode controlar o nível de detalhes visíveis quando as notificações são
exibidos na tela de bloqueio segura. Para controlar o nível de visibilidade, chame
setVisibility()
e
especifique um destes valores:
VISIBILITY_PRIVATE
: Mostra informações básicas, como o ícone da notificação, mas oculta o do conteúdo completo da notificação.VISIBILITY_PUBLIC
: Mostra o conteúdo completo da notificação.VISIBILITY_SECRET
: Não mostra nada, inclusive o ícone da notificação.
Quando o nível de visibilidade é VISIBILITY_PRIVATE
,
você também pode fornecer uma versão encoberta da notificação
conteúdo que oculte dados pessoais. Por exemplo, um app de SMS pode exibir
notificação que mostra "Você tem 3 novas mensagens de texto" mas oculta a mensagem
conteúdo e remetentes. Para fornecer essa notificação alternativa, primeiro crie a
notificação de substituição usando Notification.Builder
. Quando
você criar o objeto de notificação particular, anexe a notificação de substituição
por meio do
setPublicVersion()
.
Metadados de notificação
O Android 5.0 usa metadados associados às notificações do seu aplicativo
para classificar as notificações de forma mais inteligente. Para definir os metadados, chame o método
métodos abaixo no Notification.Builder
quando você
construa a notificação:
setCategory()
: informa ao sistema como processar as notificações do app quando o dispositivo está no modo prioridade (por exemplo, se uma notificação representar uma chamada recebida, mensagem instantânea ou alarme).setPriority()
: Marca a notificação como mais ou menos importante que as notificações normais. Notificações com o campo de prioridade definido comoPRIORITY_MAX
ouPRIORITY_HIGH
aparecem em uma janela flutuante pequena se a notificação também tiver som ou vibração.addPerson()
: permite adicionar uma ou mais pessoas relevantes a uma notificação. Seu app pode usar isso para sinalizar ao sistema que precisa ser agrupado notificações de pessoas específicas ou classificar as notificações dessas pessoas como mais importante.
Gráficos
Compatibilidade com OpenGL ES 3.1
O Android 5.0 adiciona interfaces Java e suporte nativo para OpenGL ES 3.1 As principais funcionalidades novas oferecidas no OpenGL ES 3.1 incluem:
- Sombreadores de computação
- Objetos shader separados
- Comandos de desenho indiretos
- Texturas multiamostra e de estêncil
- Melhorias à linguagem de sombreamento
- Extensões para o modo de mesclagem avançada e depuração
- Compatibilidade reversa com o OpenGL ES 2.0 e 3.0
A interface Java para OpenGL ES 3.1 no Android tem
GLES31
: Ao usar o OpenGL ES 3.1, é preciso
declará-la no arquivo de manifesto com o
tag <uses-feature>
e o atributo android:glEsVersion
. Exemplo:
<manifest> <uses-feature android:glEsVersion="0x00030001" /> ... </manifest>
Para mais informações sobre como usar o OpenGL ES, incluindo como verificar o a versão do OpenGL ES compatível com o dispositivo durante a execução, consulte o Guia da API OpenGL ES.
Pacote de extensões para Android
Além do OpenGL ES 3.1, esta versão fornece um pacote de extensão com
Interfaces Java e suporte nativo para funcionalidade gráfica avançada. Esses
as extensões são tratadas como um único pacote pelo Android. Se o
ANDROID_extension_pack_es31a
extensão está presente, seu app pode
presumir que todas as extensões do pacote estão presentes e ativar a linguagem de sombreamento
recursos com uma única instrução #extension
.
O pacote de extensão oferece:
- Suporte garantido ao sombreador de fragmentos para buffers de armazenamento, imagens e atômicos. O suporte ao sombreador de fragmento é opcional no OpenGL ES 3.1.
- Sombreadores de mosaico e geometria
- Formato de compactação de textura ASTC (LDR)
- Sombreamento e interpolação por amostra
- Modos diferentes de mesclagem para cada anexo colorido em um buffer de quadro
A interface Java para o pacote de extensão é fornecida com
GLES31Ext
: No manifesto do app, é possível declarar que
o app precisa ser instalado apenas em dispositivos compatíveis com o pacote de extensão.
Exemplo:
<manifest> <uses-feature android:name=“android.hardware.opengles.aep” android:required="true" /> ... </manifest>
Mídia
Camera API para recursos avançados da câmera
O Android 5.0 apresenta a nova
android.hardware.camera2 (link em inglês)
API para facilitar a captura de fotos com granularidade fina e o processamento de imagens. Agora é possível
acessar programaticamente os dispositivos de câmera disponíveis para o sistema com
getCameraIdList()
e se conectar a um dispositivo específico
openCamera()
.
Para começar a capturar imagens, crie uma CameraCaptureSession
e especificar os objetos Surface
para enviar as imagens capturadas.
O CameraCaptureSession
pode ser configurado para
tire fotos individuais ou várias em sequência.
Para receber notificações quando novas imagens forem capturadas, implemente a
Ouvinte CameraCaptureSession.CaptureCallback
e defini-la na solicitação de captura. Agora, quando o sistema completar a imagem
capturar solicitação, seu CameraCaptureSession.CaptureCallback
listener recebe uma chamada
onCaptureCompleted()
,
fornecendo os metadados de captura de imagem em um
CaptureResult
Com a classe CameraCharacteristics
,
detectam quais recursos da câmera estão disponíveis em um dispositivo. O método
A propriedade INFO_SUPPORTED_HARDWARE_LEVEL
representa o nível de funcionalidade da câmera.
- Todos os dispositivos oferecem suporte ao
INFO_SUPPORTED_HARDWARE_LEVEL_LEGACY
nível de hardware, que tem recursos aproximadamente equivalente ao deCamera
descontinuado API. - Os dispositivos com suporte ao nível de hardware
INFO_SUPPORTED_HARDWARE_LEVEL_FULL
podem realizar ações controle de captura e pós-processamento e captura de imagens de alta resolução com frame rates altos.
Para saber como usar
Câmera
API, consulte a implementação de Camera2Basic
e Camera2Video
nesta versão.
Reprodução de áudio
Esta versão inclui as seguintes mudanças no
AudioTrack
:
- Agora seu app pode fornecer dados de áudio no formato de ponto flutuante
(
ENCODING_PCM_FLOAT
). Isso permite maior alcance dinâmico, precisão mais consistente e margem maior. A aritmética do ponto de flutuação é muito útil durante cálculos intermediários. Os pontos de extremidade de reprodução usam formato de número inteiro para dados de áudio com menor intensidade de bits No Android 5.0, partes do pipeline interno ainda não ponto flutuante. - Seu app agora pode fornecer dados de áudio como um
ByteBuffer
em o mesmo formato fornecido porMediaCodec
. - O
WRITE_NON_BLOCKING
pode simplificar o armazenamento em buffer e o multithreading para alguns aplicativos.
Controle de reprodução de mídia
Use as novas APIs de notificação e mídia para garantir que o
do sistema sabe sobre sua reprodução de mídia e pode extrair e mostrar a arte do álbum.
Ficou mais fácil controlar a reprodução de mídia em uma interface e em um serviço com o novo
MediaSession
e
MediaController
classes.
A nova classe MediaSession
substitui
a classe descontinuada RemoteControlClient
e fornece uma
conjunto único de métodos de callback para lidar com controles de transporte e botões de mídia.
Se o app oferece reprodução de mídia e é executado no sistema
TV ou
Wear, use o
Classe MediaSession
para lidar com seu transporte
usando os mesmos métodos de callback.
Agora você pode criar seu próprio app de controles de mídia com a nova
MediaController
. Essa classe fornece
uma maneira segura de linha de execução de monitorar e controlar a reprodução de mídia a partir do processo de IU do seu app.
Ao criar um controlador, especifique um MediaSession.Token
para que seu app possa interagir com o MediaSession
especificado.
Ao usar os métodos MediaController.TransportControls
,
é possível enviar comandos como play()
,
stop()
,
skipToNext()
,
e setRating()
para controlar a reprodução de mídia na sessão. Com o controlador, também é possível
registrar um objeto MediaController.Callback
para
detectar metadados e alterações de estado na sessão.
Além disso, é possível criar notificações avançadas que permitem controle de reprodução
vinculado a uma sessão de mídia com o novo Notification.MediaStyle
.
.
Pesquisa de mídia
O Android 5.0 introduz a possibilidade de os aplicativos navegarem pelo conteúdo de mídia
biblioteca de outro aplicativo, por meio da nova
android.media.Browse (link em inglês)
API. Para expor o conteúdo de mídia no app, estenda o
MediaBrowserService
. Sua implementação do
MediaBrowserService
deve fornecer acesso a um
MediaSession.Token
para que os apps possam abrir conteúdo de mídia
fornecidos pelo seu serviço.
Para interagir com um serviço de navegação de mídia, use o
MediaBrowser
. Especificar o componente
nome de uma MediaSession
ao criar
MediaBrowser
. Com essa instância do navegador,
o app pode se conectar ao serviço associado e receber uma
Objeto MediaSession.Token
para abrir conteúdo exposto
por meio desse serviço.
Armazenamento
Seleção de diretório
O Android 5.0 estende a Framework de acesso ao armazenamento para permitir que os usuários selecionem uma subárvore de diretórios inteira, concedendo aos apps acesso de leitura/gravação a todos os documentos contidos sem exigir a confirmação do usuário para cada item.
Para selecionar uma subárvore de diretório, crie e envie um
OPEN_DOCUMENT_TREE
intenção. O sistema mostra todos
DocumentsProvider
instâncias compatíveis com a seleção de subárvore,
permitindo que o usuário procure e selecione um diretório. O URI retornado representa
acesso à subárvore selecionada. Você pode usar buildChildDocumentsUriUsingTree()
e buildDocumentUriUsingTree()
junto com
query()
para explorar a subárvore.
O novo método createDocument()
permite criar documentos ou diretórios em qualquer lugar
na subárvore. Para gerenciar documentos existentes, use
renameDocument()
e
deleteDocument()
.
Verifique COLUMN_FLAGS
para verificar o suporte do provedor a essas chamadas antes de emiti-las.
Se você estiver implementando um DocumentsProvider
e quiser
para oferecer suporte à seleção de subárvore, implemente isChildDocument()
e inclua FLAG_SUPPORTS_IS_CHILD
no COLUMN_FLAGS
.
O Android 5.0 também introduz novos diretórios específicos de pacotes em
armazenamento compartilhado, no qual o app pode colocar arquivos de mídia para inclusão
MediaStore
: A nova
getExternalMediaDirs()
retorna caminhos para esses
diretórios em todos os dispositivos de armazenamento compartilhado. Semelhante a
getExternalFilesDir()
,
nenhuma outra permissão é necessária para que o aplicativo acesse os caminhos retornados. A
plataforma procura periodicamente novas mídias nesses diretórios, mas você também pode
use MediaScannerConnection
para verificar explicitamente se há novos
conteúdo.
Redes sem fio e Conectividade
Diversas conexões de rede
O Android 5.0 fornece novas APIs de várias redes que permitem que seu aplicativo procurar dinamicamente redes disponíveis com recursos específicos; e para estabelecer uma conexão com eles. Essa funcionalidade é útil quando seu app requer uma rede especializada, como uma rede supl, MMS ou de faturamento via operadora, ou se você quer enviar dados usando um tipo específico de protocolo de transporte.
Para selecionar e se conectar dinamicamente a uma rede no seu app, siga estas instruções etapas:
- Crie um
ConnectivityManager
. - Use a classe
NetworkRequest.Builder
para criar um objetoNetworkRequest
e especificar os atributos de rede e o tipo de transporte em que seu app está interessado. - Para procurar redes adequadas, chame
requestNetwork()
. ouregisterNetworkCallback()
e transmita o objetoNetworkRequest
e uma implementação doConnectivityManager.NetworkCallback
. Use orequestNetwork()
, se você quiser mudar ativamente para uma rede adequada assim que ela for detectada; para receber notificações apenas para redes verificadas sem alternar ativamente, use oregisterNetworkCallback()
.
Quando o sistema detecta uma rede adequada, ele se conecta a ela e
invoca o
onAvailable()
o retorno de chamada. É possível usar o objeto Network
do callback para
receber informações adicionais sobre a rede ou direcionar o tráfego para usar o
rede selecionada.
Bluetooth de baixa energia
O Android 4.3 introduziu suporte à plataforma para Bluetooth de baixa energia (Bluetooth LE) na função central. No Android 5.0, um dispositivo Android agora pode atuar como um dispositivo periférico Bluetooth LE. Os apps podem usar esse recurso para que os dispositivos próximos saibam da presença deles. Por exemplo, você pode criar apps que permitem que um dispositivo funcione como um pedômetro ou monitor de saúde e se comunique com outro dispositivo Bluetooth LE.
As novas APIs android.bluetooth.le
permitem que seus apps transmitam
anúncios, procurar respostas e criar conexões com Bluetooth
LE. Para usar os novos recursos de publicidade e verificação, adicione o
BLUETOOTH_ADMIN
no manifesto. Quando os usuários atualizam ou fazem o download do seu app na Play Store,
ele precisa conceder a seguinte permissão ao seu app:
"Informações de conexão Bluetooth: permite que o app controle o Bluetooth,
incluindo transmissão ou obtenção de informações sobre dispositivos Bluetooth próximos."
Para iniciar a publicidade do Bluetooth LE para que outros dispositivos possam descobrir
seu app, chame
startAdvertising()
e passar uma implementação do
AdvertiseCallback
. O objeto de callback
recebe um relatório do sucesso ou falha da operação de publicidade.
O Android 5.0 introduz a classe ScanFilter
para que
que seu aplicativo possa verificar apenas
tipos específicos de dispositivos
nos quais está interessado. Para começar a procurar Bluetooth
Dispositivos LE. Ligue para startScan()
e transmitir uma lista de filtros. Na chamada do método, você também deve fornecer um
implementação de ScanCallback
para informar quando um
Anúncio LE Bluetooth encontrado.
Melhorias à NFC
O Android 5.0 adiciona essas melhorias para permitir uma maior visibilidade uso flexível da NFC:
- O Android Beam está disponível no menu de compartilhamento.
- Seu app pode invocar o Android Beam no dispositivo do usuário para compartilhar dados
chamando
invokeBeam()
. Isso evita a necessidade de o usuário tocar manualmente o dispositivo em outro Dispositivo compatível com NFC para concluir a transferência de dados. - É possível usar o novo método
createTextRecord()
para criar um registro NDEF contendo dados de texto UTF-8. - Se estiver desenvolvendo um aplicativo de pagamento, agora você pode
registrar dinamicamente um ID de aplicativo NFC (AID) chamando
registerAidsForService()
: Também é possível usarsetPreferredService()
para definir o serviço de emulação de cartão preferencial que precisa ser usada quando uma atividade específica estiver em primeiro plano.
Project Volta
Além dos novos recursos, o Android 5.0 enfatiza melhorias na bateria vida. Use as novas APIs e ferramentas para entender e otimizar a capacidade do seu app e consumo.
Agendamento de trabalhos
O Android 5.0 fornece uma nova JobScheduler
.
API que permite otimizar a duração da bateria definindo jobs para o sistema executar
de forma assíncrona em um momento posterior ou sob condições específicas (como quando o
dispositivo está carregando). O agendamento de tarefas é útil em situações como quando:
- O aplicativo tem tarefas não orientadas ao usuário que podem ser adiadas.
- O app tem tarefas que você prefere realizar quando a unidade estiver conectada.
- O app tem uma tarefa que exige acesso à rede ou Wi-Fi uma conexão com a Internet.
- O aplicativo tem diversas tarefas que você quer executar em lote em um cronograma.
Uma unidade de trabalho é encapsulada por um objeto JobInfo
.
Esse objeto especifica os critérios de agendamento.
Use a classe JobInfo.Builder
para configurar como o
a tarefa agendada deve ser executada. É possível programar a tarefa para ser executada em
como as seguintes:
- Iniciar quando o dispositivo estiver carregando
- Iniciar quando o dispositivo estiver conectado a uma rede ilimitada
- Iniciar quando o dispositivo estiver ocioso
- Terminar antes de um determinado prazo ou com um mínimo de atraso
Por exemplo, você pode adicionar um código como este para executar a tarefa em uma rede ilimitada:
Kotlin
val uploadTask: JobInfo = JobInfo.Builder( jobId, serviceComponent /* JobService component */ ).run { setRequiredNetworkType(JobInfo.NETWORK_TYPE_UNMETERED) build() } val jobScheduler = context.getSystemService(Context.JOB_SCHEDULER_SERVICE) as JobScheduler jobScheduler.schedule(uploadTask)
Java
JobInfo uploadTask = new JobInfo.Builder(jobId, serviceComponent /* JobService component */) .setRequiredNetworkCapabilities(JobInfo.NETWORK_TYPE_UNMETERED) .build(); JobScheduler jobScheduler = (JobScheduler) context.getSystemService(Context.JOB_SCHEDULER_SERVICE); jobScheduler.schedule(uploadTask);
Se o dispositivo tiver energia estável (ou seja, estiver conectado há mais tempo mais de dois minutos e a bateria estiver em nível íntegro), o sistema executará qualquer job programado que esteja pronto para ser executado, mesmo que a o prazo não expirou.
Para ver um exemplo de como usar a API JobScheduler
,
consulte o exemplo de implementação de JobSchedulerSample
nesta versão.
Ferramentas de desenvolvedor para uso da bateria
O novo comando dumpsys batterystats
gera informações
dados estatísticos sobre o uso da bateria de um dispositivo, organizados por ID de usuário único
(UID, sigla em inglês). As estatísticas incluem:
- Histórico de eventos relacionados à bateria
- Estatísticas gerais do dispositivo
- Uso aproximado da bateria por UID e componentes do sistema
- Ms por dispositivo móvel por pacote
- Estatísticas agregadas do UID do sistema
- Estatísticas agregadas do UID do app
Use a opção --help
para saber mais sobre as várias opções de
na personalização da saída. Por exemplo, para imprimir o uso da bateria
estatísticas de um determinado pacote de aplicativos desde que o dispositivo foi carregado pela última vez, execute este
comando:
$ adb shell dumpsys batterystats --charged <package-name>
Você pode usar o
Battery Historian (em inglês)
ferramenta na saída do comando dumpsys
para
gerar uma visualização HTML de eventos relacionados à energia dos registros. Isso
ajuda você a entender e diagnosticar as falhas
a problemas relacionados.
Android no local de trabalho e na educação
Provisionamento gerenciado
O Android 5.0 oferece novas funcionalidades para a execução de aplicativos no em um ambiente corporativo. Um administrador do dispositivo pode iniciar um processo de provisionamento gerenciado para adicionar uma co-apresentação, mas perfil gerenciado a um dispositivo, se o usuário tiver uma conta pessoal. Os apps associados a perfis gerenciados aparecem ao lado apps não gerenciados no acesso rápido, na tela Recentes e nas notificações do usuário.
Para iniciar o processo de provisionamento gerenciado, envie
ACTION_PROVISION_MANAGED_PROFILE
em um Intent
. Se o
for bem-sucedida, o sistema acionará o
onProfileProvisioningComplete()
.
Em seguida, você pode chamar setProfileEnabled()
para
ativar este perfil gerenciado.
Por padrão, somente um subgrupo de aplicativos são habilitados no perfil gerenciado.
Para instalar outros apps no perfil gerenciado, chame
enableSystemApp()
:
Se você estiver desenvolvendo um app de tela de início, use a nova classe LauncherApps
para ver uma lista de atividades inicializáveis.
para o usuário atual e os perfis gerenciados associados. O acesso rápido pode tornar
os apps gerenciados visualmente em destaque, anexando um crachá de trabalho ao ícone
drawable. Para recuperar o ícone com selo, chame
getUserBadgedIcon()
:
Para saber como usar a nova funcionalidade, consulte o
Amostra de implementação de BasicManagedProfile
nesta versão.
Proprietário de dispositivo
O Android 5.0 apresenta a capacidade de implantar um aplicativo proprietário de dispositivo. Um dispositivo
proprietário é um tipo especializado de
administrador do dispositivo
que tem a capacidade adicional de criar e remover usuários secundários e
defina as configurações globais no dispositivo. O app proprietário do dispositivo pode usar
métodos na classe DevicePolicyManager
controle detalhado da configuração, da segurança e dos apps em dispositivos gerenciados.
Um dispositivo só pode ter um proprietário de dispositivo ativo por vez.
Para implantar e ativar um proprietário do dispositivo, você precisa realizar uma transferência de dados NFC de um aplicativo de programação para o dispositivo enquanto o dispositivo está na estado. Essa transferência de dados envia as mesmas informações que na intent de provisionamento descrito em Provisionamento gerenciado.
Fixação de tela
O Android 5.0 apresenta uma nova API de fixação de tela que permite temporariamente impedir que os usuários saiam da tarefa ou sejam interrompidos por notificações. Isso pode ser usado, por exemplo, se você estiver desenvolvendo um aplicativo educacional para oferecer suporte a requisitos de avaliação de alto risco no Android ou um projeto aplicativo de quiosque. Depois que seu app ativar a fixação de tela, os usuários não poderão ver notificações, acessar outros aplicativos ou voltar à tela inicial, até que o app saia desse modo.
Há duas formas de ativar a fixação de tela:
- Manualmente:os usuários podem ativar a fixação de tela no Configurações > Segurança > Fixação de tela e selecione as tarefas fixe tocando no ícone verde de alfinete na tela "Recentes".
- De forma programática:para ativar a fixação de tela
programaticamente, chame
startLockTask()
do seu app. Se o app solicitante não for um proprietário do dispositivo, o usuário vai receber uma solicitação para confirmação. Um app proprietário do dispositivo pode chamar osetLockTaskPackages()
para permitir que apps possam ser fixados sem a etapa de confirmação do usuário.
Quando o bloqueio de tarefas estiver ativo, ocorrerá o seguinte comportamento:
- A barra de status está em branco e as notificações do usuário e informações de status são escondidos.
- Os botões Home e Recent Apps serão ocultados.
- Outros aplicativos não poderão iniciar novas atividades.
- O app atual poderá iniciar novas atividades, desde que isso não inicie criar novas tarefas.
- Quando a fixação de tela é invocada por um proprietário do dispositivo, o usuário permanece bloqueado
ao seu app até que ele chame
stopLockTask()
: - Se a fixação de tela for ativada por outro app que não seja o proprietário do dispositivo ou diretamente pelo usuário, ele pode sair mantendo pressionados os botões Voltar e Recente.
Estrutura de impressão
Renderização de PDF como bitmap
Agora você pode renderizar páginas de documentos PDF em imagens bitmap para impressão,
usando a nova classe PdfRenderer
. Você deve especificar um
ParcelFileDescriptor
que é pesquisável (ou seja, o conteúdo
podem ser acessados aleatoriamente) em que o sistema grava o conteúdo para impressão.
O app pode acessar uma página para renderização com
openPage()
, depois chame
render()
para transformar o PdfRenderer.Page
aberto em um bitmap. Você
você também pode definir parâmetros adicionais se quiser converter apenas uma parte do
documento em uma imagem bitmap (por exemplo, para implementar
renderização de blocos
para aumentar o zoom no documento).
Para conferir um exemplo de como usar as novas APIs, consulte a PdfRendererBasic
amostra.
Sistema
Estatísticas de uso do aplicativo
Agora é possível acessar o histórico de uso de apps em um dispositivo Android com o
nova API android.app.usage
. Essa API oferece informações de uso
mais informações do que o modelo
getRecentTasks()
.
Para usar essa API, primeiro é necessário declarar o
"android.permission.PACKAGE_USAGE_STATS"
no manifesto.
O usuário também precisa ativar o acesso a esse app em Configurações > Segurança > Apps
com acesso ao uso.
O sistema coleta os dados de uso por app, agregando o dados em intervalos diários, semanais, mensais e anuais. A duração máxima que o sistema mantém esses dados é o seguinte:
- Dados diários: 7 dias
- Dados semanais: 4 semanas
- Dados mensais: 6 meses
- Dados anuais: 2 anos
Para cada aplicativo, o sistema registra os seguintes dados:
- A última vez em que o aplicativo foi usado
- O tempo total em que o app ficou em primeiro plano nesse intervalo (por dia, semana, mês ou ano)
- Captura de carimbo de data/hora quando um componente (identificado por um pacote e pelo nome da atividade) movidos para o primeiro ou segundo plano durante um dia
- Captura de carimbo de data/hora quando a configuração de um dispositivo muda (como quando o a orientação do dispositivo mudou devido à rotação)
Testes e Acessibilidade
Melhorias de teste e acessibilidade
O Android 5.0 adiciona o seguinte suporte para testes e acessibilidade:
- O novo
getWindowAnimationFrameStats()
egetWindowContentFrameStats()
métodos capturam estatísticas de frames para animações de janela e conteúdo. Esses métodos permitem criar testes de instrumentação para avaliar se um app está renderizando frames com uma frequência de atualização suficiente para proporcionar uma boa experiência ao usuário. - A nova
executeShellCommand()
permite que você execute comandos de shell no seu teste de instrumentação. A A execução do comando é semelhante à execução doadb shell
em um host conectados ao dispositivo, permitindo o uso de ferramentas baseadas em shell, comodumpsys
,am
,content
epm
. - Serviços de acessibilidade e ferramentas de teste que usam as APIs de acessibilidade
(como
UiAutomator
) agora podem recuperar informações detalhadas sobre as propriedades de janelas no tela com a qual usuários com deficiências podem interagir. Para recuperar uma lista de objetosAccessibilityWindowInfo
, chame o novo métodogetWindows()
. - O novo
AccessibilityNodeInfo.AccessibilityAction
permite que você defina ações padrão ou personalizadas para realizar em umaAccessibilityNodeInfo
. O novoAccessibilityNodeInfo.AccessibilityAction
substitui as APIs relacionadas a ações anteriormente encontradasAccessibilityNodeInfo
. - O Android 5.0 fornece controle mais refinado sobre a síntese de conversão de texto em voz em
seu app. A nova classe
Voice
permite que o app: use perfis de voz associados a localidades, qualidade e latência específicas classificação e parâmetros específicos do mecanismo de conversão de texto em voz.
IME
Troca mais fácil entre idiomas de entrada
A partir do Android 5.0, os usuários podem alternar com mais facilidade entre
todas as entradas
Editores de método (IME, na sigla em inglês) compatíveis com a plataforma. A execução das
a ação de alternância (normalmente tocando em um ícone de globo no teclado de software) funciona
por todos esses IMEs. Essa mudança de comportamento é implementada pela
shouldOfferSwitchingToNextInputMethod()
.
Além disso, a estrutura agora verifica se o próximo IME inclui uma
de troca de mecanismo de autenticação (e, assim, se o IME oferece suporte à alternância para
o IME depois dele). Um
O IME com um mecanismo de alternância não alternará para um IME sem esse mecanismo. Isso
mudança de comportamento é implementada pela
switchToNextInputMethod()
.
Para ver um exemplo de como usar as APIs de mudança de IME atualizadas, consulte o atualizado de exemplo de implementação de teclado virtual nesta versão. Para saber mais sobre como implementar a alternância entre IMEs, consulte Como criar um método de entrada.
Declarações do manifesto
Recursos necessários declaráveis
Os valores a seguir agora são suportados no
<uses-feature>
para garantir que seu aplicativo seja instalado somente em dispositivos que
fornecem os recursos de que seu app precisa.
FEATURE_AUDIO_OUTPUT
FEATURE_CAMERA_CAPABILITY_MANUAL_POST_PROCESSING
FEATURE_CAMERA_CAPABILITY_MANUAL_SENSOR
FEATURE_CAMERA_CAPABILITY_RAW
FEATURE_CAMERA_LEVEL_FULL
FEATURE_GAMEPAD
FEATURE_LIVE_TV
FEATURE_MANAGED_USERS
FEATURE_LEANBACK
FEATURE_OPENGLES_EXTENSION_PACK
FEATURE_SECURELY_REMOVES_USERS
FEATURE_SENSOR_AMBIENT_TEMPERATURE
FEATURE_SENSOR_HEART_RATE_ECG
FEATURE_SENSOR_RELATIVE_HUMIDITY
FEATURE_VERIFIED_BOOT
FEATURE_WEBVIEW
Permissões do usuário
A seguinte permissão agora tem suporte no
<uses-permission>
para declarar as permissões necessárias para o aplicativo acessar determinadas APIs.
BIND_DREAM_SERVICE
: ao segmentar a API nível 21 ou superior, essa permissão é exigida por um serviço Daydream, para garantir que somente o sistema possa se vincular a ela.