APIs do Android 3.0

Nível da API: 11

Para desenvolvedores, a plataforma Android 3.0 (HONEYCOMB) está disponível como um componente para download do SDK do Android. A plataforma para download inclui uma biblioteca e uma imagem do sistema Android, além de um conjunto de skins de emulador e muito mais. A plataforma para download não inclui bibliotecas externas.

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 e uma imagem do sistema Android, além de um conjunto de skins de emulador 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. É possível combinar vários fragmentos em uma única atividade para criar uma interface de vários painéis em que cada painel gerencia o próprio ciclo de vida e as 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, você pode misturar e combinar fragmentos com base no tamanho e na 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, é necessário criar uma 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, 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 do item de menu, inclua o atributo android:showAsAction com um valor de "ifRoom". Quando há espaço suficiente, o item de menu 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 atributo android:actionViewClass com o nome da classe de um widget. Você também precisa declarar o atributo android: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 vai se comportar como um item de menu normal e não vai mostrar o widget.

  • Adicionar uma ação ao logotipo do aplicativo e substituí-lo por um logotipo personalizado

    O logotipo do aplicativo recebe automaticamente o ID android.R.id.home, que o sistema entrega ao callback onOptionsItemSelected() 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 chame setDisplayUseLogoEnabled(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ários exemplos também estão disponíveis no aplicativo 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 app e colar em outro que ofereça suporte a 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, é necessário criar um novo objeto ClipData, que contém um ou mais objetos ClipData.Item, 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.

Para ler um arquivo da área de transferência (para colá-lo), chame 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 um pedaço de dados recortados (um objeto ClipData) por vez, mas um ClipData pode conter vários ClipData.Items.

Para mais informações, leia o artigo Copiar e colar. Você também pode conferir uma implementação simples de copiar e colar no exemplo de Demonstrações de API e uma implementação mais completa no exemplo do Notepad.

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. O ponto inicial e final da operação de arrasto é um View. Portanto, as APIs que processam diretamente as operações de arrastar e soltar estã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 arrasto em um View (receber a "queda"), registre a visualização com um OnDragListener chamando setOnDragListener(). Quando um evento de arrastar ocorre na visualização, o sistema chama onDrag() para o OnDragListener, que recebe um DragEvent descrevendo o tipo de ação de arrastar que ocorreu (como ACTION_DRAG_STARTED, ACTION_DRAG_ENTERED e ACTION_DROP). Durante um arrasto, o sistema chama onDrag() repetidamente para a visualização abaixo do arrasto, para transmitir um 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 arrasto possa carregar um objeto ClipData, ele não está relacionado ao Clipboard 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 documentação sobre Arrastar e soltar. Você também pode conferir uma implementação de arrastar e soltar no aplicativo API Demos e no aplicativo Honeycomb Gallery.

Widgets de apps

O Android 3.0 oferece suporte a várias novas classes de widgets para widgets de apps mais interativos na tela inicial dos usuários, incluindo: GridView, ListView, StackView, ViewFlipper e AdapterViewFlipper.

Mais importante, é possível usar o novo RemoteViewsService para criar widgets de apps com coleções, usando widgets como GridView, ListView e StackView que são apoiados por dados remotos, como de um provedor de conteúdo.

A classe AppWidgetProviderInfo (definida em XML com um elemento <appwidget-provider>) também oferece suporte a dois novos campos: autoAdvanceViewId e previewImage. O campo autoAdvanceViewId permite especificar o ID de visualização da subexibição do widget de app, que precisa ser avançado automaticamente pelo host do widget. O 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 o widget do app (para especificar no campo previewImage), o Android Emulator inclui um aplicativo chamado "Widget Preview". Para criar uma imagem de visualização, inicie esse aplicativo, selecione o widget do app e configure como você quer exibir a imagem. Em seguida, salve e coloque-a 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 ampliadas para oferecer suporte a notificações de barra de status com mais conteúdo. Além disso, uma nova classe Notification.Builder permite criar objetos Notification com facilidade.

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 na barra de status, usando setTicker().
  • Suporte a layouts de notificação personalizados para incluir botões com PendingIntents, 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 do 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 exemplos de código usando carregadores nos exemplos de LoaderCursor e LoaderThrottle.

APIs de Bluetooth A2DP e fone de ouvido

O Android agora inclui APIs para que os aplicativos verifiquem o estado de dispositivos de perfil de fone de ouvido e Bluetooth A2DP conectados. 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 da animação, mas não tem conhecimento do objeto ou da propriedade específicos que são animados 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 animações personalizadas, chame setAnimator() no LayoutTransition e forneça um Animator personalizado, como um ValueAnimator ou ObjectAnimator discutido 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 setChoiceMode() permite que os usuários selecionem vários itens de um ListView ou GridView. 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 um MultiChoiceModeListener com setMultiChoiceModeListener().

    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 chamando onItemCheckedStateChanged().

    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. As novas transformações são possíveis com um conjunto de propriedades de objeto que definem a posição, a orientação, a transparência e muito mais do layout da visualização.

    Os novos métodos para definir as propriedades de 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 e alpha.

    Usando 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 ObjectAnimator com View, a propriedade "rotationY" e os valores inicial e final:

    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 ou android: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 base para um AdapterView que executa animações ao alternar entre as visualizações.

    • AdapterViewFlipper

      ViewAnimator simples que anima entre duas ou mais visualizações que foram adicionadas a ele. Apenas uma criança é mostrada por vez. Se solicitado, ele pode alternar automaticamente entre cada filho em um intervalo regular.

    • CalendarView

      Permite que os usuários selecionem datas de um calendário tocando na data e rolando ou deslizando o calendário para a data desejada. Você pode configurar o intervalo de datas disponíveis no widget.

    • ListPopupWindow

      É ancorado a uma visualização de host e mostra uma lista de opções, como uma lista de sugestões ao digitar em uma visualização EditText.

    • NumberPicker

      Permite que o usuário selecione um número de um intervalo predefinido. O widget apresenta um campo de entrada 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. O 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). Esse widget é especialmente ú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 é possível ativar o renderizador OpenGL para seu aplicativo definindo android:hardwareAccelerated="true" no elemento <application> do elemento de manifesto ou em elementos <activity> individuais.

    Essa flag ajuda os aplicativos, fazendo com que eles sejam desenhados mais rapidamente. Isso resulta em animações mais suaves, rolagem mais uniforme e melhor desempenho geral e resposta à interação do usuário.

  • Conferir o suporte para camadas de hardware e software

    Por padrão, um View não tem camada especificada. É possível especificar que o seja apoiada por uma camada de hardware ou software, especificada pelos valores LAYER_TYPE_HARDWARE e LAYER_TYPE_SOFTWARE, usando setLayerType() ou a layerType .

    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 do Android, 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 LAYER_TYPE_HARDWARE e LAYER_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 de câmera de vídeo agora oferecem suporte à capacidade de gravar vídeos em time lapse. O setCaptureRate() define a taxa em que os frames precisam ser capturados.

  • Suporte a texturas para transmissões de imagem

    O novo SurfaceTexture permite capturar um fluxo de imagens como uma textura do OpenGL ES. Ao chamar setPreviewTexture() para sua instância Camera, você pode especificar o SurfaceTexture em que a reprodução de vídeo ou os frames de visualização da câmera serão renderizados.

  • HTTP Live Streaming

    Agora os aplicativos podem transmitir um URL de playlist M3U para o framework de mídia para iniciar uma sessão de streaming HTTP ao vivo. 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 (como QUALITY_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 ao protocolo de transferência de mídia/imagem (MTP/PTP, na sigla em inglês) por USB, permitindo que os usuários transfiram facilmente qualquer tipo de arquivo de mídia entre dispositivos e para um computador host. Os desenvolvedores podem aproveitar esse suporte para criar aplicativos que permitem aos usuários criar ou gerenciar arquivos de mídia interativa que podem ser transferidos ou compartilhados 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 framework 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 oculta a complexidade das operações de DRM e permite um modo de operação consistente para conteúdo protegido e não protegido, em vários esquemas de DRM.

    Para fabricantes de dispositivos, proprietários de conteúdo e provedores de mídia digital na Internet, o DRM a API de 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 oferece plug-ins DRM nativos para verificar e aplicar direitos digitais. No entanto, os fabricantes de dispositivos podem enviar plug-ins de DRM com os dispositivos.

    Todas as APIs DRM estão disponíveis no pacote android.drm.

Suporte a teclado

  • Suporte a modificadores de controle, Meta, Caps Lock, Num Lock e Scroll Lock. Para mais informações, consulte META_CTRL_ON e campos relacionados.
  • Suporte a teclados completos no estilo de computadores, incluindo suporte a teclas como Escape, Home, End, Delete e outras. Para determinar se os eventos de teclas vêm de um teclado completo, consultando getKeyboardType() e verificando KeyCharacterMap.FULL
  • O TextView agora oferece suporte a corte, cópia, colagem e seleção de tudo com base no teclado, usando as combinações de teclas Ctrl+X, Ctrl+C, Ctrl+V e Ctrl+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 do estado do modificador de chave de maneira correta e consistente. Consulte hasModifiers(int), hasNoModifiers(), metaStateHasModifiers() e metaStateHasNoModifiers().
  • Os aplicativos podem implementar atalhos de teclado personalizados criando subclasses de Activity, Dialog ou View e implementando onKeyShortcut(). 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 atributo android:alphabeticShortcut ou android:numericShortcut para cada <item> (ou com setShortcut()).
  • O Android 3.0 inclui um novo dispositivo "teclado virtual" com o ID KeyCharacterMap.VIRTUAL_KEYBOARD. O teclado virtual tem um mapa de teclas dos EUA no estilo de computador, que é útil para sintetizar eventos de teclas para testar entradas.

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ções 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 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 divididos 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 os eventos de toque divididos em janelas, a barra do sistema não pode receber eventos de toque ao mesmo tempo que a atividade. Isso não afeta se as visualizações dentro da atividade podem dividir eventos de toque. Por padrão, a atividade ainda pode dividir eventos de toque entre visualizações.

    Para mais informações sobre como criar um tema, leia Aplicar estilos e temas.

WebKit

  • A nova classe WebViewFragment para criar um fragmento composto por um WebView.
  • Novos métodos WebSettings:
    • setDisplayZoomControls() permite ocultar os controles de zoom na tela, mas ainda permite que o usuário faça zoom com gestos com o dedo (setBuiltInZoomControls() precisa ser definido como true).
    • O novo método WebSettings, setEnableSmoothTransition(), permite ativar transições suaves ao fazer movimentos de deslocamento e zoom. Quando ativado, o WebView escolhe uma solução para maximizar o desempenho. Por exemplo, o conteúdo do WebView pode não ser atualizado durante a transição.
  • Novos métodos WebView:
    • Callback onPause(), para pausar o processamento associados à WebView quando ela for ocultada. Isso é útil para reduzir o uso desnecessário de CPU ou tráfego de rede quando a WebView não está em primeiro plano.
    • Callback onResume() para retomar o processamento associado à WebView, que foi pausada durante onPause().
    • saveWebArchive() permite salvar a visualização atual como um arquivo da Web no dispositivo.
    • showFindDialog() inicia uma pesquisa de texto em a visualização atual.

Navegador

O aplicativo do 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, ao excluir o parâmetro capture=camera, o usuário pode escolher capturar uma nova imagem com a câmera ou selecionar uma do dispositivo (como do aplicativo Galeria).

  • Orientação do dispositivo

    Conforme definido pela especificação do Evento de orientação do dispositivo, o navegador permite que aplicativos da Web ouçam eventos do 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 do construtor e transmitindo o InputStreamReader que alimenta a string JSON. Em seguida, comece a ler um objeto chamando beginObject(), leia um nome de chave com nextName(), leia o valor usando métodos respectivos ao tipo, como nextString() e nextInt(), e continue 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 maneira semelhante ao leitor, usando name() para adicionar um nome de propriedade e um método value() adequado para adicionar o valor respectivo.

Essas classes são rígidas por padrão. O método setLenient() em cada classe configura as classes 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 elemento de manifesto <uses-feature> precisa ser usado para informar entidades externas (como o Google Play) sobre o conjunto de recursos de hardware e software de que o aplicativo depende. 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 um sistema de entrada do usuário que pode emular um subconjunto de recursos de tela touchscreen. Um exemplo desse sistema de entrada é um mouse ou controle remoto que aciona um 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 faketouch (e 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, o aplicativo vai estar disponível para o maior número possível de tipos de dispositivo, incluindo aqueles que fornecem apenas uma entrada de tela touch simulada.

    Todos os dispositivos que incluem uma tela tátil também oferecem suporte a "android.hardware.faketouch", porque os recursos de tela tátil são um superconjunto dos recursos de toque simulado. Portanto, a menos que você realmente precise de uma tela touchscreen, adicione um elemento <uses-feature> para faketouch.

Novas permissões

  • "android.permission.BIND_REMOTEVIEWS"

    Ela precisa ser declarada como uma permissão obrigatória no elemento de manifesto <service> para uma implementação de RemoteViewsService. Por exemplo, ao criar um widget de app que usa RemoteViewsService para preencher uma visualização de coleção, a entrada do manifesto pode ter a seguinte aparência:

    <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
    • Upgrade para a versão 2.6.36
  • VM Dalvik
    • Novo código para oferecer suporte e otimizar o SMP
    • Várias melhorias na infraestrutura JIT
    • Melhorias no coletor de lixo:
      • Ajustado para SMP
      • Suporte a tamanhos de heap maiores
      • Processamento unificado para bitmaps e buffers de byte
  • Bibliotecas principais do Dalvik
    • Nova implementação muito mais rápida da NIO (biblioteca de E/S moderna)
    • 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 da API do framework. A API do Android 3.0 recebe um identificador inteiro, 11: ou seja, armazenadas no próprio sistema. Esse identificador, chamado de "nível da API", permite que o sistema determine corretamente se um aplicativo é compatível com o sistema antes de instalá-lo.

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?