APIs do Android 3.0

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 atributo android:actionViewClass com o nome da classe de um widget. Também é necessário 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 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 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á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.Items.

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 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 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 app 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. 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 e alpha.

    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 com View, 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 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 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 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, 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 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 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 chamar setPreviewTexture() para sua instância de Camera, você pode especificar o SurfaceTexture 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 (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 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 verificando KeyCharacterMap.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. Consulte hasModifiers(int), hasNoModifiers(), metaStateHasModifiers(), 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 "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 um WebView.
  • 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 definido true).
    • 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 durante onPause().
    • 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.

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 de RemoteViewsService. Por exemplo, quando criar um widget de app que usa RemoteViewsService 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?