Nível da API: 11
Para desenvolvedores, a plataforma Android 3.0
(HONEYCOMB
) está disponível para download
do SDK do Android. A plataforma para download inclui uma biblioteca Android e um sistema
imagem, bem como um conjunto de aparências de emulador e muito mais. A plataforma para download não inclui recursos
bibliotecas.
Para desenvolvedores, a plataforma Android 3.0 está disponível como um do SDK do Android para download. A plataforma para download inclui uma biblioteca Android e uma imagem do sistema, bem como um conjunto de aparências e mais. Para começar a desenvolver ou testar no Android 3.0, use o Android SDK Manager para fazer o download da plataforma no SDK.
Visão geral da API
As seções abaixo fornecem uma visão geral técnica das novidades para desenvolvedores no Android 3.0, incluindo novos recursos e alterações na API do framework desde a versão anterior.
Fragmentos
Um fragmento é um novo componente de estrutura que permite separar elementos distintos de um
atividades em módulos independentes que definem a própria IU e o próprio ciclo de vida. Para criar um
é necessário estender a classe Fragment
e implementar vários componentes
métodos de callback, semelhantes a um Activity
. Em seguida, é possível combinar
em uma única atividade para criar uma interface de vários painéis na qual cada
gerencia o próprio ciclo de vida e entradas do usuário.
Também é possível usar um fragmento sem fornecer uma interface e usá-lo como um worker para a atividade, por exemplo, para gerenciar o andamento de um download que ocorre apenas enquanto o atividade está em execução.
Além disso:
- Os fragmentos são autônomos e podem ser reutilizados em várias atividades.
- Você pode adicionar, remover, substituir e animar fragmentos dentro da atividade
- É possível adicionar fragmentos a uma backstack gerenciada pela atividade, preservando o estado à medida que são alterados, permitindo que o usuário navegue para trás por diferentes estados
- Ao fornecer layouts alternativos, é possível misturar e combinar fragmentos com base do tamanho e da orientação da tela
- Os fragmentos têm acesso direto à atividade do contêiner e podem contribuir com itens para Barra de ações da atividade (discutida a seguir)
Para gerenciar os fragmentos na sua atividade, use o FragmentManager
, que fornece várias APIs para interagir com fragmentos, como
como encontrar fragmentos na atividade e removê-los da backstack para restaurar os
para o estado anterior.
Para realizar uma transação, como adicionar ou remover um fragmento, você precisa criar um FragmentTransaction
. Em seguida, você pode chamar métodos como add()
, remove()
ou replace()
. Depois de aplicar todas
alterações que você quer realizar na transação, chame commit()
, e o sistema aplicará a transação de fragmento
a atividade.
Para saber mais sobre o uso de fragmentos, leia a documentação de Fragmentos. Várias também estão disponíveis no API Demos.
Barra de ações
A barra de ações substitui a barra de título tradicional, localizada na parte superior da janela de atividade. Ele inclui o logotipo do aplicativo no canto esquerdo e fornece uma nova interface para itens do menu Opções. Além disso, o A barra de ações permite:
- Adicionar itens de menu diretamente na barra de ações, como "itens de ação".
Na declaração XML para o item de menu, inclua o atributo
android:showAsAction
com um valor de"ifRoom"
. Quando houver espaço suficiente, o menu item aparece diretamente na Barra de ações. Caso contrário, o item é colocado no menu flutuante, revelado pelo ícone do menu no lado direito da barra de ações. - Substituir um item de ação por um widget (como uma caixa de pesquisa) criando um
"visualização de ação".
Na declaração XML do item de menu, adicione o atributo
android:actionViewLayout
. com um recurso de layout ou o atributoandroid:actionViewClass
com o nome da classe de um widget. Também é necessário declarar o atributoandroid:showAsAction
para que o item apareça. na barra de ações.) Se não houver espaço suficiente na barra de ações e o item aparecer no menu flutuante, ele se comporta como um item de menu normal e não mostra o widget. - Adicionar uma ação ao logotipo do aplicativo e substituí-la por um logotipo personalizado
O logotipo do aplicativo recebe automaticamente o ID
android.R.id.home
, que o sistema entrega ao callbackonOptionsItemSelected()
da atividade quando tocado. Basta responder a esse ID em seu callback para realizar uma ação, como ir para a página inicial do seu aplicativo atividades.Para substituir o ícone por um logotipo, especifique o logotipo do seu aplicativo no arquivo de manifesto com o
android:logo
e chamesetDisplayUseLogoEnabled(true)
na sua atividade. - Adicionar navegação estrutural para voltar à backstack de fragmentos
- Adicione guias ou uma lista suspensa para navegar pelos fragmentos
- Personalizar a barra de ações com temas e planos de fundo
A barra de ações é padrão para todos os aplicativos que usam o novo tema holográfico, que é
também padrão quando você define android:minSdkVersion
ou android:targetSdkVersion
como "11"
.
Para mais informações, leia a documentação Barra de ações. Várias também estão disponíveis no API Demos.
Área de transferência do sistema
Os aplicativos agora podem copiar e colar dados (além de meros texto) de e para todo o sistema área de transferência. Os dados recortados podem ser texto simples, um URI ou uma intent.
Ao fornecer ao sistema acesso aos dados que você quer que o usuário copie, por meio de um provedor de conteúdo, o usuário pode copiar conteúdo complexo (como uma imagem ou estrutura de dados) do seu aplicativo e cole-o em outro aplicativo compatível com esse tipo de conteúdo.
Para começar a usar a área de transferência, acesse o objeto ClipboardManager
global
chame getSystemService(CLIPBOARD_SERVICE)
.
Para copiar um item para a área de transferência, crie um novo objeto ClipData
com um ou mais ClipData.Item
objetos, cada um descrevendo uma única entidade. Para criar um objeto ClipData
contendo apenas uma ClipData.Item
, use um dos métodos auxiliares,
como newPlainText()
, newUri()
e newIntent()
, cada um retornando um objeto ClipData
pré-carregado com o
ClipData.Item
que você fornecer.
Para adicionar o ClipData
à área de transferência, transmita-o para setPrimaryClip()
na sua instância de ClipboardManager
.
Em seguida, você pode ler um arquivo da área de transferência (para colar) chamando getPrimaryClip()
no ClipboardManager
. Gerenciar os ClipData
recebidos pode
ser complicado e você precisa ter certeza de que consegue lidar com o tipo de dados na área de transferência
antes de tentar colar.
A área de transferência mantém apenas uma parte dos dados recortados (um ClipData
).
objeto) por vez, mas um ClipData
pode conter vários ClipData.Item
s.
Para mais informações, leia o artigo Copiar e colar. Você também pode ver uma implementação simples de copiar e colar nas demonstrações da API e uma implementação mais completa no exemplo do Bloco de Notas.
Arrastar e soltar
As novas APIs simplificam as operações de arrastar e soltar na interface do usuário do seu aplicativo. Uma drag
operação é a transferência de algum tipo de dados, transferidos em um ClipData
de um lugar para outro. Os pontos de início e término da operação de arrastar são View
. Portanto, as APIs que processam diretamente as operações de arrastar e soltar são
na classe View
.
Uma operação de arrastar e soltar tem um ciclo de vida definido por várias ações de arrastar, cada uma
definido por um objeto DragEvent
, como ACTION_DRAG_STARTED
, ACTION_DRAG_ENTERED
e
ACTION_DROP
. Cada visualização que quer participar de uma ação de arrastar
operação pode detectar essas ações.
Para começar a arrastar conteúdo na atividade, chame startDrag()
.
em uma View
, fornecendo um objeto ClipData
que representa
os dados a serem arrastados, um View.DragShadowBuilder
para facilitar a "sombra"
que os usuários veem com os dedos ao arrastar e uma Object
que pode compartilhar
informações sobre o objeto de arrastar com visualizações que podem receber o objeto.
Para aceitar um objeto de arrastar em uma View
(receber a "solta"), registre a visualização.
com um OnDragListener
chamando setOnDragListener()
. Quando um evento de arrastar ocorre na visualização, a
o sistema chama onDrag()
para o OnDragListener
, que recebe um DragEvent
.
descrevendo o tipo de ação de arrastar ocorreu (como ACTION_DRAG_STARTED
, ACTION_DRAG_ENTERED
e
ACTION_DROP
). Durante uma ação de arrastar, o sistema chama repetidamente onDrag()
para a visualização por baixo da ação de arrastar, para fornecer uma
fluxo de eventos de arrastar. A visualização de recebimento pode consultar o tipo de evento enviado ao onDragEvent()
chamando getAction()
no DragEvent
.
Observação:embora um evento de arrastar possa carregar um objeto ClipData
, isso não está relacionado à área de transferência do sistema. Uma ação de arrastar e soltar
operação nunca deve colocar os dados arrastados na área de transferência do sistema.
Para mais informações, leia a seção Arrastar e Como descartar a documentação. Você também pode ver uma implementação do recurso de arrastar e soltar no Demonstrações de APIs e a Galeria do Honeycomb para o aplicativo.
Widgets de apps
O Android 3.0 oferece suporte a várias novas classes de widget para widgets de aplicativo mais interativos nos usuários
Tela inicial, incluindo: GridView
, ListView
, StackView
, ViewFlipper
e AdapterViewFlipper
.
E o mais importante: é possível usar o novo RemoteViewsService
para criar apps
widgets com coleções usando widgets como GridView
, ListView
e StackView
, que têm o suporte de dados remotos;
como de um provedor de conteúdo.
A classe AppWidgetProviderInfo
(definida em XML com um elemento <appwidget-provider>
) também é compatível com dois novos campos: autoAdvanceViewId
e previewImage
. O campo autoAdvanceViewId
permite especificar o ID da visualização do
subvisualização do widget de app que precisa ser avançado automaticamente pelo host do widget de app. A
O campo previewImage
especifica uma visualização
o widget de app é semelhante e é mostrado ao usuário no seletor de widgets. Se este campo não for
fornecido, o ícone do widget do app é usado para a visualização.
Para ajudar a criar uma imagem de visualização para seu widget de app (para especificar no campo previewImage
), o Android Emulator inclui uma
aplicativo chamado "Widget Preview". Para criar uma imagem de visualização, inicie este aplicativo, selecione o
widget para seu aplicativo, configure-o como você quer que a imagem de visualização apareça. Em seguida, salve
e colocá-lo nos recursos drawable do seu aplicativo.
Confira uma implementação dos novos recursos do widget de apps no widget de app StackView e no widget de lista de clima. aplicativos conteinerizados.
Notificações da barra de status
As APIs Notification
foram estendidas para oferecer suporte a mais status de conteúdo avançado
de notificações da barra de ferramentas, além da nova classe Notification.Builder
, que permite que você
criar objetos Notification
.
Os novos recursos incluem:
- Suporte a um ícone grande na notificação, usando
setLargeIcon()
. Isso geralmente é para aplicativos sociais que mostrem a foto de contato da pessoa que é a origem da ou que apps de mídia mostrem a miniatura do álbum. - Suporte a layouts personalizados no mostrador da barra de status, usando
setTicker()
. - Suporte a layouts de notificação personalizados para incluir botões com
PendingIntent
s, para widgets de notificação mais interativos. Por exemplo, notificação pode controlar a reprodução de música sem iniciar uma atividade.
Carregadores de conteúdo
As novas APIs de framework facilitam o carregamento assíncrono de dados usando a classe Loader
. Você pode usá-lo em combinação com componentes de IU como visualizações e
para carregar dados de linhas de execução de worker de maneira dinâmica. A subclasse CursorLoader
foi projetada especialmente para ajudar você a fazer isso para dados apoiados por
um ContentProvider
.
Tudo o que você precisa fazer é implementar a interface LoaderCallbacks
para receber callbacks quando um novo carregador é solicitado ou os dados são
mudou, depois chame initLoader()
para inicializar o
para sua atividade ou fragmento.
Para mais informações, leia a documentação dos Carregadores. Você também pode conferir exemplo de código usando carregadores no objeto LoaderCursor e Exemplos de LoaderThrottle (links em inglês).
APIs de Bluetooth A2DP e fone de ouvido
O Android agora inclui APIs para que os aplicativos verifiquem o estado do Bluetooth A2DP conectado e dispositivos com perfil de fone de ouvido. Por exemplo, os aplicativos podem identificar quando um fone de ouvido Bluetooth está conectado para ouvir música e notificar o usuário conforme apropriado. Os aplicativos também podem receber transmite para comandos AT específicos do fornecedor e notifica o usuário sobre o estado do sistema dispositivo conectado, por exemplo, quando a bateria do dispositivo conectado está baixa.
Você pode inicializar o respectivo BluetoothProfile
chamando getProfileProxy()
com A2DP
ou HEADSET
.
constante de perfil e uma BluetoothProfile.ServiceListener
para receber
os callbacks associados quando o cliente Bluetooth estiver conectado ou desconectado.
Estrutura de animação
Um framework de animação flexível totalmente novo permite animar propriedades arbitrárias de qualquer objeto. (View, Drawable, Fragment, Object ou qualquer outra coisa). Ele permite definir vários aspectos de um animação, como:
- Duração
- Repetir valor e comportamento
- Tipo de interpolação de tempo
- O animador define para exibir animações juntas, em sequência ou depois de atrasos especificados.
- Atraso na atualização de frames
Você pode definir esses aspectos de animação, e outros, para os valores int, flutuante e hexadecimal de um objeto
valores de cor, por padrão. Ou seja, quando um objeto tem um campo de propriedade para um desses tipos, você
pode mudar o valor ao longo do tempo para afetar uma animação. Para animar qualquer outro tipo de valor, você diz
ao sistema como calcular os valores para determinado tipo, implementando a interface TypeEvaluator
.
Há dois animadores que podem ser usados para animar os valores de uma propriedade: ValueAnimator
e ObjectAnimator
. O ValueAnimator
calcula os valores de animação, mas não reconhece a
objeto ou propriedade que é animada como resultado. Ele simplesmente executa os cálculos, e você deve
detectar as atualizações e processar os dados com sua própria lógica. O ObjectAnimator
é uma subclasse da ValueAnimator
.
permite que você defina o objeto e a propriedade que serão animados e lida com todo o trabalho de animação.
Ou seja, você fornece ao ObjectAnimator
o objeto que será animado, a
do objeto mude ao longo do tempo e um conjunto de valores a serem aplicados à propriedade
tempo e, em seguida, inicie a animação.
Além disso, a classe LayoutTransition
permite a transição automática
animações para alterações feitas no layout da atividade. Para ativar as transições para parte da
layout, crie um objeto LayoutTransition
e defina-o
qualquer ViewGroup
chamando setLayoutTransition()
. Isso faz com que o padrão
animações que são executadas sempre que itens são adicionados ou removidos do grupo. Para especificar valores
animações, chame setAnimator()
na LayoutTransition
e forneça um Animator
personalizado,
como um ValueAnimator
ou ObjectAnimator
discutidos acima.
Para mais informações, consulte a documentação Animação de propriedade. Você pode consulte também vários exemplos que usam as APIs de animação na API Demos.
Framework de interface estendido
- Seleção de múltipla escolha para ListView e GridView
O novo modo
CHOICE_MODE_MULTIPLE_MODAL
para o appsetChoiceMode()
permite que os usuários selecionem vários itens de umListView
ouGridView
. Quando usado em em conjunto com a barra de ações, os usuários podem selecionar vários itens e, em seguida, selecionar a ação a de uma lista de opções na barra de ações (que se transformou em um modelo Modo de ação).Para ativar a seleção de múltipla escolha, chame
setChoiceMode(CHOICE_MODE_MULTIPLE_MODAL)
e registre umMultiChoiceModeListener
comsetMultiChoiceModeListener()
.Quando o usuário mantém um item pressionado em um item, a barra de ações alterna para a opção de múltipla escolha. Modo de ação. O sistema notifica o
MultiChoiceModeListener
quando os itens são selecionados chamandoonItemCheckedStateChanged()
.Para conferir um exemplo de seleção de múltipla escolha, consulte a List15. Java no aplicativo de exemplo de demonstrações da API.
- Novas APIs para transformar visualizações
As novas APIs permitem que você aplique facilmente transformações 2D e 3D às visualizações da sua atividade o mesmo layout organizacional. Novas transformações são possíveis com um conjunto de propriedades de objeto que definem a posição do layout, orientação, transparência e muito mais.
Novos métodos para definir as propriedades da visualização incluem:
setAlpha()
,setBottom()
,setLeft()
,setRight()
,setBottom()
,setPivotX()
,setPivotY()
,setRotationX()
,setRotationY()
,setScaleX()
,setScaleY()
,setAlpha()
e outros.Alguns métodos também têm um atributo XML correspondente que você pode especificar no layout. para aplicar uma transformação padrão. Os atributos disponíveis incluem:
translationX
,translationY
,rotation
,rotationX
,rotationY
,scaleX
,scaleY
,transformPivotX
,transformPivotY
ealpha
.Uso de algumas dessas novas propriedades de visualização em combinação com o novo framework de animação (discutido) acima), você pode aplicar facilmente algumas animações sofisticadas às suas visualizações. Por exemplo, para girar uma visualização no eixo y, forneça a
ObjectAnimator
comView
, a tag "rotationY" e os valores start e end:Kotlin
ObjectAnimator.ofFloat(myView, "rotationY", 0f, 360f).apply { duration = 2000 start() }
Java
ObjectAnimator animator = ObjectAnimator.ofFloat(myView, "rotationY", 0, 360); animator.setDuration(2000); animator.start();
- Novos temas holográficos
Os widgets padrão do sistema e a aparência geral foram reformulados e incorporam um novo "holográfico" tema da interface do usuário. O sistema aplica o novo tema. usando o sistema padrão de estilo e tema.
Qualquer aplicativo destinado à plataforma Android 3.0, configurando a
android:minSdkVersion
ouandroid:targetSdkVersion
como"11"
: herda o tema holográfico por padrão. No entanto, se o aplicativo também aplicar o próprio tema, ele substituirá o tema holográfico, a menos que você atualize os estilos para herdar esse tema.Para aplicar o tema holográfico a atividades individuais ou para herdá-las em seu próprio tema. definições, use uma das várias novas opções
Theme.Holo
temas. Se seu aplicativo for compatível com uma versão do Android anterior à 3.0 e se aplicar para temas personalizados, selecione um tema com base na plataforma versão. - Novos widgets
AdapterViewAnimator
Classe de base para uma
AdapterView
que executa animações ao alternar entre as visualizações.AdapterViewFlipper
ViewAnimator
simples, que executa a animação entre duas ou mais visualizações com que foi adicionado a ela. Apenas um filho é exibido por vez. Se solicitado, ele pode virar automaticamente entre para cada filho em um intervalo regular.CalendarView
Permite que os usuários selecionem datas em uma agenda tocando na data e rolem ou deslizem rapidamente calendário para uma data desejada. Você pode configurar o intervalo de datas disponíveis no widget.
ListPopupWindow
Ancora-se a uma visualização do host e mostra uma lista de opções, como uma lista de sugestões ao digitar em uma visualização de
EditText
.NumberPicker
Permite que o usuário selecione um número de um intervalo predefinido. O widget apresenta uma entrada campo e botões para cima e para baixo para selecionar um número. Tocar no campo de entrada permite que o usuário role pelos valores ou toque novamente para editar diretamente o valor atual. Também permite mapear posições em strings, de modo que a string correspondente seja exibida em vez do índice posição
PopupMenu
Mostra um
Menu
em uma janela pop-up modal ancorada a uma visualização. A um pop-up será exibido abaixo da visualização da âncora, se houver espaço, ou acima dela, se não houver espaço. Se o IME (software teclado) estiver visível, o pop-up não se sobrepõe ao IME até que o usuário toque no .SearchView
Fornece uma caixa de pesquisa que você pode configurar para entregar consultas de pesquisa para um determinado atividades e exibir sugestões de pesquisa (da mesma forma que a caixa de diálogo de pesquisa tradicional). Isso é particularmente útil para oferecer um widget de pesquisa na barra de ações. Para mais informações, consulte Como criar uma interface de pesquisa.
StackView
Uma visualização que mostra as filhas em uma pilha em 3D e permite que os usuários deslizem pelas telas visualizações como um rolodex.
Gráficos
- Gráficos 2D com aceleração de hardware
Agora você pode ativar o renderizador OpenGL para seu aplicativo definindo
android:hardwareAccelerated="true"
no<application>
do elemento do manifesto. elemento ou para<activity>
individuais os elementos.Essa flag ajuda os aplicativos, fazendo com que eles sejam desenhados mais rapidamente. Isso resulta em animações mais suaves, rolagem mais suave e melhor desempenho e resposta em geral à interação do usuário.
- Visualizar suporte para camadas de hardware e software
Por padrão, um
View
não tem uma camada especificada. É possível especificar que o seja apoiada por uma camada de hardware ou software, especificada pelos valoresLAYER_TYPE_HARDWARE
eLAYER_TYPE_SOFTWARE
, usandosetLayerType()
ou alayerType
.Uma camada de hardware é apoiada por uma textura específica do hardware (geralmente objetos Frame Buffer ou FBO em hardware OpenGL) e faz com que a visualização seja renderizada usando a renderização de hardware do Android. pipeline, mas apenas se a aceleração de hardware estiver ativada para a hierarquia de visualização. Quando o hardware A aceleração está desativada, e as camadas de hardware se comportam exatamente como camadas de software.
Uma camada de software é apoiada por um bitmap e faz com que a visualização seja renderizada usando o pipeline de renderização de software, mesmo que a aceleração de hardware esteja ativada. As camadas de software devem ter evitado quando a árvore de visualização afetada é atualizada com frequência. Toda atualização exigirá uma nova renderização do camada de software, o que pode ser lento.
Para mais informações, consulte a documentação de
LAYER_TYPE_HARDWARE
eLAYER_TYPE_SOFTWARE
. - Mecanismo de gráficos 3D do RenderScript
O Renderscript é um framework 3D de tempo de execução que fornece uma API para criar cenas em 3D como uma linguagem de shader especial, independente da plataforma, para o desempenho máximo. Com o Renderscript, você pode acelerar operações gráficas e processamento de dados. O Renderscript é a maneira ideal de criar efeitos 3D de alto desempenho para aplicativos, planos de fundo, carrosséis e muito mais.
Para mais informações, consulte o artigo Renderização e computação 3D com Renderscript.
Mídia
- Vídeo em Time Lapse
As APIs Camcorder agora oferecem suporte à capacidade de gravar vídeos em Time Lapse. A
setCaptureRate()
define a velocidade dos frames precisam ser capturados. - Suporte a texturas para streams de imagem
O novo
SurfaceTexture
permite capturar um stream de imagem como um OpenGL ES textura. Ao chamarsetPreviewTexture()
para sua instância deCamera
, você pode especificar oSurfaceTexture
em que a reprodução de vídeo ou os frames de visualização serão desenhados do câmera. - Transmissão ao vivo HTTP
Os aplicativos agora podem passar um URL de playlist M3U para o framework de mídia para iniciar uma transmissão HTTP Live de streaming. O framework de mídia oferece suporte à maioria das especificações de transmissão ao vivo HTTP, incluindo taxa de bits adaptável. Consulte o documento Formatos de mídia compatíveis para mais informações.
- Dados EXIF
O
ExifInterface
inclui novos campos para abertura da foto, ISO e exposição. tempo de resposta. - Perfis de filmadoras
Novo método
hasProfile()
e vários vídeos os perfis de qualidade (comoQUALITY_1080P
,QUALITY_720P
,QUALITY_CIF
, entre outros) permitem determinar as câmeras opções de qualidade. - Transferência de arquivos de mídia digital
A plataforma inclui suporte integrado para protocolo de transferência de mídia/imagens (MTP/PTP) via USB, que permite aos usuários transferir facilmente qualquer tipo de arquivo de mídia entre dispositivos e para um computador host. Os desenvolvedores podem aproveitar esse suporte, criando aplicativos que permitem aos usuários criar ou gerenciar arquivos de mídia que podem querer transferir ou compartilhar entre dispositivos.
- Gerenciamento de direitos digitais (DRM)
Nova estrutura de gestão extensível de direitos digitais (DRM, na sigla em inglês) para verificação e aplicação direitos. Ele é implementado em duas camadas de arquitetura:
- Uma API de estrutura DRM, que é exposta a aplicativos e executada pela VM Dalvik para aplicativos padrão.
- Gerenciador de DRM de código nativo que implementa a API da estrutura e expõe uma interface para DRM para lidar com o gerenciamento e a descriptografia de direitos para vários esquemas de DRM.
Para desenvolvedores de aplicativos, o framework oferece uma API abstrata e unificada que simplifica a gerenciamento de conteúdo protegido. A API esconde a complexidade das operações de DRM e permite que uma um modo de operação consistente para conteúdo protegido e desprotegido e em vários sistemas de gerenciamento de direitos autorais (DRM, na sigla em inglês) esquemas.
Para fabricantes de dispositivos, proprietários de conteúdo e provedores de mídia digital na Internet, o DRM a API do plug-in do framework fornece um meio de adicionar suporte ao esquema de DRM de sua escolha no sistema Android, para a aplicação segura da proteção de conteúdo.
A versão de pré-lançamento não fornece plug-ins de DRM nativos para verificação e aplicação de controles direitos. No entanto, os fabricantes de dispositivos podem fornecer plug-ins de DRM com seus dispositivos.
Todas as APIs DRM estão disponíveis no pacote
android.drm
.
Compatibilidade com teclado
- Compatibilidade com os modificadores Control, Meta, Caps Lock, Num Lock e Scroll Lock. Para mais informações,
consulte
META_CTRL_ON
e campos relacionados. - Suporte a teclados completos de computador, incluindo suporte a teclas como Esc, Home, End,
Excluir e outros. Para determinar se os eventos de teclas vêm de um teclado completo,
consultando
getKeyboardType()
e verificandoKeyCharacterMap.FULL
- O
TextView
agora oferece suporte para corte, cópia e recorte do teclado. colar e selecionar tudo usando as combinações de teclas Control + X, Control + C Control + V e Control + A. Ele também oferece suporte para Page Up/Page Down, Home/End e a seleção de texto baseada no teclado. KeyEvent
adiciona vários métodos novos para facilitar a verificação da chave. o estado do modificador de forma correta e consistente. ConsultehasModifiers(int)
,hasNoModifiers()
,metaStateHasModifiers()
,metaStateHasNoModifiers()
.- Os aplicativos podem implementar atalhos de teclado personalizados criando subclasses de
Activity
,Dialog
ouView
e implementandoonKeyShortcut()
. O framework chama esse método sempre que uma tecla é combinada com a tecla Control. Ao criar um menu "Opções", você pode registrar o teclado definindo o atributoandroid:alphabeticShortcut
ouandroid:numericShortcut
para cada<item>
(ou comsetShortcut()
). - O Android 3.0 inclui um novo "teclado virtual" dispositivo com o ID
KeyCharacterMap.VIRTUAL_KEYBOARD
. O ambiente o teclado tem um mapa de teclas dos EUA no estilo de área de trabalho, que é útil para sintetizar eventos de tecla para testes entrada.
Eventos de toque de divisão
Antes, apenas uma visualização podia aceitar eventos de toque por vez. Android 3.0 adiciona suporte à divisão de eventos de toque entre visualizações e até mesmo janelas, para que diferentes visualizações possam aceitar eventos de toque simultâneos.
Os eventos de toque de divisão são ativados por padrão quando um aplicativo segmenta
Android 3.0 Ou seja, quando o aplicativo define o android:minSdkVersion
ou android:targetSdkVersion
como "11"
.
No entanto, as propriedades a seguir permitem desativar a divisão de eventos de toque nas visualizações dentro da em grupos de visualizações específicos e em janelas diferentes.
- O atributo
android:splitMotionEvents
para grupos de visualização permite desativar eventos de toque divididos que ocorrem entre visualizações filhas em um layout. Exemplo:<LinearLayout android:splitMotionEvents="false" ... > ... </LinearLayout>
Dessa forma, as visualizações filhas no layout linear não podem dividir os eventos de toque, apenas uma visualização pode receber eventos de toque por vez.
- A propriedade de estilo
android:windowEnableSplitTouch
permite desativar os eventos de toque de divisão nas janelas, aplicando a um tema da atividade. ou todo o aplicativo. Exemplo:<style name="NoSplitMotionEvents" parent="android:Theme.Holo"> <item name="android:windowEnableSplitTouch">false</item> ... </style>
Quando esse tema é aplicado a uma
<activity>
ou uma<application>
, somente eventos de toque dentro da janela da atividade atual são aceitos. Por exemplo, ao desativar a divisão eventos de toque em janelas, a barra do sistema não pode receber eventos de toque ao mesmo tempo que o atividades. Isso não afeta se as visualizações dentro da atividade podem dividir o toque eventos. Por padrão, a atividade ainda pode dividir eventos de toque entre visualizações.Para mais informações sobre como criar um tema, leia Como aplicar estilos e temas.
WebKit
- A nova classe
WebViewFragment
para criar um fragmento composto por umWebView
. - Novos métodos
WebSettings
:setDisplayZoomControls()
permite ocultar os controles de zoom na tela enquanto ainda permite que o usuário aumente o zoom com gestos de dedo (setBuiltInZoomControls()
precisa ser definidotrue
).- O novo método
WebSettings
,setEnableSmoothTransition()
, permite que você para permitir transições suaves ao movimentar e aplicar zoom. Quando ativada, a WebView escolhe uma solução para maximizar o desempenho (por exemplo, o conteúdo do WebView pode não ser atualizado durante o transição).
- Novos métodos
WebView
:- Callback
onPause()
, para pausar o processamento associados à WebView quando ela for ocultada. Isso é útil para reduzir o uso de CPU e tráfego de rede quando a WebView não está em primeiro plano. - Callback
onResume()
para retomar o processamento associado à WebView, que foi pausada duranteonPause()
. saveWebArchive()
permite que você salve o visualização atual como um arquivo da Web no dispositivo.showFindDialog()
inicia uma pesquisa de texto em a visualização atual.
- Callback
Navegador
O aplicativo Navegador adiciona os seguintes recursos para oferecer suporte a aplicativos da Web:
- Captura de mídia
Conforme definido pela Captura de mídia HTML especificação, o navegador permite que aplicativos da web acessem captura de áudio, imagem e vídeo do dispositivo. Por exemplo, o HTML a seguir fornece uma entrada para o usuário capturar uma foto para fazer upload:
<input type="file" accept="image/*;capture=camera" />
Ou excluindo o parâmetro
capture=camera
, o usuário pode optar por capturar uma nova imagem com a câmera ou selecionar uma do dispositivo (como no aplicativo Galeria). - Orientação do dispositivo
Conforme definido pelo evento de orientação do dispositivo. especificação, o navegador permite que aplicativos da web escute eventos DOM que fornecem informações sobre a orientação física e o movimento do dispositivo.
A orientação do dispositivo é expressa com os eixos x, y e z, em graus e o movimento é expressa com dados de taxa de aceleração e rotação. Uma página da Web pode se registrar para orientação eventos chamando
window.addEventListener
com o tipo de evento"deviceorientation"
e registre-se para eventos de movimento registrando o tipo de evento"devicemotion"
. - Transformações CSS 3D
Conforme definido pelo guia CSS 3D Transform Module, o navegador permite que elementos renderizados pelo CSS sejam transformados em três dimensões.
Utilitários do JSON
As novas turmas, JsonReader
e JsonWriter
, ajudam você
leem e gravam streams JSON. As novas APIs complementam as classes org.json
, que manipulam
um documento na memória.
É possível criar uma instância de JsonReader
chamando
o método construtor e transmitindo o InputStreamReader
que alimenta a string JSON.
Em seguida, comece a ler um objeto chamando beginObject()
, leia uma
nome da chave com nextName()
, leia o valor usando métodos
respectivos ao tipo, como nextString()
e nextInt()
, e continuar fazendo isso enquanto hasNext()
for verdadeiro.
Você pode criar uma instância de JsonWriter
chamando o construtor e
transmitindo o OutputStreamWriter
apropriado. Em seguida, grave os dados JSON de forma
semelhante ao leitor, usando name()
para adicionar um nome de propriedade;
e um método value()
apropriado para adicionar os respectivos
.
Essas classes são rigorosas por padrão. O setLenient()
em cada classe os configura para serem mais liberais no que aceitam. Essa tolerância
o modo de análise também é compatível com o analisador padrão de org.json
.
Novas constantes de recurso
O <uses-feature>
manfest deve ser usado para informar entidades externas (como o Google Play) sobre o conjunto de
recursos de hardware e software necessários para o aplicativo. Nesta versão, o Android adiciona
seguintes novas constantes que os aplicativos podem declarar com esse elemento:
"android.hardware.faketouch"
Quando declarado, isso indica que o aplicativo é compatível com um dispositivo que oferece uma touchscreen emulada (ou superior). Um dispositivo que oferece uma tela touchscreen emulada fornece uma entrada do usuário. que pode emular um subconjunto de telas recursos. Um exemplo desse tipo de sistema de entrada é um mouse ou controle remoto que acione uma cursor na tela. Esses sistemas de entrada oferecem suporte a eventos de toque básicos, como clicar para baixo, clicar para cima e arrastar. No entanto, tipos de entrada mais complicados (como gestos, movimentos rápidos etc.) podem ser mais difíceis ou impossíveis em dispositivos de toque falso (e os gestos multitoque definitivamente não são possíveis).
Caso seu aplicativo não exija gestos complicados e você não quiser que seu aplicativo seja filtrado de dispositivos com uma tela touchscreen emulada, você precisa declarar
"android.hardware.faketouch"
com um<uses-feature>
. Dessa forma, seu aplicativo estará disponível para o maior número de tipos de dispositivos, incluindo aqueles que fornecem apenas uma entrada touchscreen emulada.Todos os dispositivos que incluem tela touchscreen também oferecem suporte a
"android.hardware.faketouch"
, porque os recursos de tela touchscreen são um superconjunto de recursos do faketouch. Assim, a menos que você precise uma tela touchscreen, adicione um<uses-feature>
para o faketouch.
Novas permissões
"android.permission.BIND_REMOTEVIEWS"
Ela precisa ser declarada como uma permissão obrigatória no manifesto
<service>
. elemento para uma implementação deRemoteViewsService
. Por exemplo, quando criar um widget de app que usaRemoteViewsService
para preencher um visualização de coleção, a entrada do manifesto será parecida com esta:<service android:name=".widget.WidgetService" android:exported="false" android:permission="android.permission.BIND_REMOTEVIEWS" />
Novas tecnologias de plataforma
- Armazenamento
- Suporte ao sistema de arquivos ext4 para ativar o armazenamento eMMC integrado.
- Sistema de arquivos FUSE para oferecer suporte a dispositivos MTP.
- Suporte ao modo de host USB para oferecer suporte a teclados e hubs USB.
- Suporte para MTP/PTP
- Kernel do Linux
- Atualização para a versão 2.6.36
- VM Dalvik
- Novo código para oferecer suporte e otimizar para SMP
- Várias melhorias na infraestrutura do JIT
- Melhorias no coletor de lixo:
- Ajustado para SMP
- Suporte a tamanhos de heap maiores
- Processamento unificado para bitmaps e buffers de byte
- Bibliotecas Dalvik Core
- Implementação nova e muito mais rápida da NIO (biblioteca moderna de E/S)
- Mensagens de exceção aprimoradas
- Correções de precisão e desempenho em todo o
Relatório de diferenças da API
Para obter uma visão detalhada de todas as mudanças de API no Android 3.0 (nível de API 11), consulte o Relatório de diferenças da API.
Nível da API
A plataforma Android 3.0 oferece uma versão atualizada do a API do framework. A API do Android 3.0 recebe um identificador inteiro, 11: ou seja, armazenadas no próprio sistema. Com esse identificador, chamado de "nível de API", é possível para determinar corretamente se um aplicativo é compatível com no sistema antes de instalar o aplicativo.
Para usar APIs introduzidas no Android 3.0 em seu aplicativo,
você precisa compilar o aplicativo na biblioteca Android fornecida no
a plataforma do SDK do Android 3.0. Dependendo das suas necessidades,
também é necessário adicionar um android:minSdkVersion="11"
ao elemento <uses-sdk>
na classe
manifesto do aplicativo. Se seu aplicativo for projetado para ser executado somente no Android 2.3 ou superior,
a declaração do atributo impede que o aplicativo seja instalado em uma
diferentes da plataforma.
Para mais informações, leia O que é a API Nível?