Nível da API: 12
Para desenvolvedores, a plataforma Android 3.1
(HONEYCOMB_MR1
) 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. A plataforma para download não inclui bibliotecas externas.
Para desenvolvedores, a plataforma Android 3.1 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.1, use o Android SDK Manager para fazer o download da plataforma no SDK.
Visão geral da API
As seções abaixo apresentam uma visão geral técnica das novidades para desenvolvedores no Android 3.1, incluindo novos recursos e mudanças na API da estrutura de trabalho, para a versão anterior.
APIs USB
O Android 3.1 introduz novas APIs poderosas para integração de periféricos conectados com aplicativos em execução na plataforma. As APIs são baseadas em uma pilha USB (Universal Serial Bus) e em serviços que são integrados à plataforma, incluindo suporte a host e dispositivo USB e interações. Com as APIs, os desenvolvedores podem criar aplicativos capazes de descubra, gerencie e se comunique com vários tipos de dispositivos conectados por USB
A pilha e as APIs distinguem dois tipos básicos de hardware USB, com base no se o dispositivo com tecnologia Android atua como host ou como hardware externo está agindo como anfitrião:
- Um dispositivo USB é um hardware conectado que depende da Dispositivo Android para servir como host. Por exemplo, a maioria dos dispositivos de entrada, mouses, joysticks são dispositivos USB, assim como muitas câmeras, hubs etc.
- Um acessório USB é um hardware conectado que tem um USB controlador host, fornece energia e foi projetado para se comunicar com Dispositivos Android por USB. Vários periféricos podem ser conectados acessórios, de controles de robótica a equipamentos musicais, bicicletas ergométricas, e muito mais.
Para os dois tipos (dispositivos e acessórios USB), o APIs USB da plataforma são compatíveis com descoberta por transmissão de intent quando anexadas ou independente, assim como interfaces padrão, endpoints e modos de transferência (controle, em massa e interrupção).
As APIs USB estão disponíveis no pacote android.hardware.usb
. A
classe central é UsbManager
, que fornece
métodos auxiliares para identificar e se comunicar com
dispositivos USB e acessórios USB. Os aplicativos podem adquirir uma instância
UsbManager
e, em seguida, consultar a lista de anexos
dispositivos ou acessórios e se comunicar com eles ou gerenciá-los.
A UsbManager
também declara ações de intent que o
transmissões do sistema, para anunciar quando um dispositivo ou acessório USB for conectado ou
separada.
Outras classes incluem:
UsbDevice
, uma classe que representa hardware conectado como um dispositivo USB, com o dispositivo com tecnologia Android atuando como host).UsbAccessory
, representando hardware externo conectado como host USB (com o dispositivo com tecnologia Android atuando como um dispositivo).UsbInterface
eUsbEndpoint
, que fornecem acesso ao USB padrão interfaces e endpoints de um dispositivo.UsbDeviceConnection
eUsbRequest
, para enviar e receber dados e controlar mensagens de ou para um dispositivo USB, de maneira síncrona e assíncrona.UsbConstants
, que fornece constantes para declarar tipos de endpoint, classes de dispositivos etc.
Embora a pilha USB seja integrada à plataforma, a compatibilidade real para os modos de host USB e acessório aberto em dispositivos específicos é determinado por de seus fabricantes. Em particular, o modo host depende de conexões USB apropriadas no hardware do controlador Android.
Além disso, os desenvolvedores podem solicitar filtros no Google Play, de modo que os aplicativos deles não sejam disponibilizados para usuários cujos dispositivos não forneçam o suporte USB apropriado. Para solicitar a filtragem, adicione um ou ambos os elementos abaixo ao manifesto do aplicativo, conforme apropriado:
- Se o aplicativo deve ser visível apenas para dispositivos compatíveis com USB
modo host (conexão de dispositivos USB), declare este elemento:
<uses-feature android:name="android.hardware.usb.host" android:required="true">
- Se o aplicativo deve ser visível apenas para dispositivos compatíveis com USB
(conexão de hosts USB), declare este elemento:
<uses-feature android:name="android.hardware.usb.accessory" android:required="true">
Para informações completas sobre como desenvolver aplicativos que interagem com acessórios USB, consulte documentação do desenvolvedor.
Para ver exemplos de aplicativos que usam a API de host USB, consulte Teste ADB e Mísseis acesso rápido
API MTP/PTP
O Android 3.1 expõe uma nova API MTP que permite que os aplicativos interajam diretamente com câmeras conectadas e outros dispositivos PTP. A nova API facilita receba notificações quando dispositivos forem conectados e removidos gerenciar arquivos e o armazenamento nesses dispositivos e transferir arquivos e metadados e a partir deles. A API MTP implementa o subconjunto de Protocolo de transferência de imagens (PTP, na sigla em inglês). da especificação do Protocolo de transferência de mídia (MTP, na sigla em inglês).
A API MTP está disponível no pacote android.mtp
e fornece
essas classes:
- O
MtpDevice
encapsula um dispositivo MTP que é conectados pelo barramento de host USB. Um aplicativo pode instanciar um objeto esse tipo e, em seguida, usa seus métodos para obter informações sobre o dispositivo e objetos armazenados nele, bem como abrir a conexão e transferir dados. Alguns dos métodos incluem:getObjectHandles()
retorna uma lista de identificadores para todos os objetos no dispositivo que correspondem a um formato e pai especificado. Para obter informações sobre um objeto, uma o aplicativo pode transmitir um handle paragetObjectInfo()
.- O
importFile()
permite que um aplicativo copie dados de um objeto para um arquivo externo armazenamento. Essa chamada pode ficar bloqueada por um tempo arbitrário, dependendo da os dados e a velocidade dos dispositivos, portanto, eles devem ser criados fio open()
permite que um aplicativo abra um dispositivo MTP/PTP conectado.- Devolução por
getThumbnail()
a miniatura do objeto como uma matriz de bytes.
MtpStorageInfo
contém informações sobre um armazenamento. em um dispositivo MTP, correspondente ao conjunto de dados StorageInfo descrito em seção 5.2.2 da especificação MTP. Os métodos da classe permitem que um aplicativo obter a string de descrição de uma unidade de armazenamento, o espaço livre, a capacidade máxima de armazenamento, o ID de armazenamento e o identificador de volume.MtpDeviceInfo
detém informações sobre um dispositivo MTP correspondente ao conjunto de dados DeviceInfo descrito na seção 5.1.1 do MTP especificação. Os métodos na classe permitem que os aplicativos obtenham as informações de um fabricante, modelo, número de série e versão.- O
MtpObjectInfo
contém informações sobre um objeto armazenado. em um dispositivo MTP, correspondente ao conjunto de dados ObjectInfo descrito na seção 5.3.1 da especificação MTP. Os métodos da classe permitem que os aplicativos recebam uma tamanho do objeto, formato de dados, tipo de associação, data de criação e miniatura informações imprecisas ou inadequadas. - O
MtpConstants
fornece constantes para declarar um arquivo MTP. códigos de formato, tipo de associação e status de proteção.
Suporte a novos dispositivos de entrada e eventos de movimento
O Android 3.1 estende o subsistema de entrada para ser compatível com novos dispositivos de entrada e novos tipos de eventos de movimento, em todas as visualizações e janelas. Os desenvolvedores podem aproveitar esses recursos para permitir que os usuários interajam com os aplicativos usando mouse, trackballs, joysticks, gamepads e outros dispositivos, além de teclados e touchscreens.
Para lidar com entradas de mouse, roda de rolagem e trackball, a plataforma oferece suporte duas novas ações de eventos de movimento:
ACTION_SCROLL
, que descreve o ponteiro local em que um movimento de rolagem sem toque, como em uma roda de rolagem do mouse, o incidente. No MotionEvent, o valor dos eixosAXIS_HSCROLL
eAXIS_VSCROLL
especifica a rolagem relativa. movimento.ACTION_HOVER_MOVE
, informa o evento a posição do mouse quando nenhum botão for pressionado, bem como quaisquer pontos desde o último eventoHOVER_MOVE
. Passar o cursor para entrar e sair notificações ainda não são suportados.
Para oferecer suporte a joysticks e gamepads, a classe InputDevice
inclui estas novas origens de dispositivos de entrada:
SOURCE_CLASS_JOYSTICK
: a origem possui eixos de joystick.SOURCE_CLASS_BUTTON
: a origem dispositivo tem botões ou teclas.SOURCE_GAMEPAD
: o dispositivo de origem. tem botões de gamepad, comoKEYCODE_BUTTON_A
ouKEYCODE_BUTTON_B
. ImplicaSOURCE_CLASS_BUTTON
SOURCE_JOYSTICK
: o dispositivo de origem. tem eixos de joystick. Implica em SOURCE_CLASS_JOYSTICK.
Para descrever eventos de movimento dessas novas fontes, assim como de ratos
e trackballs, a plataforma agora define códigos de eixo no MotionEvent
, de forma semelhante a códigos de teclas no KeyEvent
. Novos códigos de eixo para joysticks
e controles de jogos incluem
AXIS_HAT_X
, AXIS_HAT_Y
, AXIS_RTRIGGER
, AXIS_ORIENTATION
, AXIS_THROTTLE
e muitos outros.
Os eixos MotionEvent
atuais são representados por AXIS_X
, AXIS_Y
,
AXIS_PRESSURE
, AXIS_SIZE
, AXIS_TOUCH_MAJOR
, AXIS_TOUCH_MINOR
, AXIS_TOOL_MAJOR
, AXIS_TOOL_MINOR
e AXIS_ORIENTATION
.
Além disso, MotionEvent
define diversos valores
códigos de eixo que são usados quando o framework não sabe como mapear um
eixo específico. Dispositivos específicos podem usar códigos de eixo genéricos para transmitir
dados de movimento para aplicativos. Para uma lista completa de eixos e suas respectivas
interpretações, consulte a documentação da classe MotionEvent
.
A plataforma fornece eventos de movimento para aplicativos em lotes, para que um único
pode conter uma posição atual e vários chamados movimentos históricos.
Os aplicativos precisam usar getHistorySize()
para receber
o número de amostras históricas e, em seguida, recuperar e processar todos os dados
amostras em ordem usando getHistoricalAxisValue()
. Depois disso, os aplicativos devem processar o arquivo
amostra usando getAxisValue()
.
Alguns eixos podem ser recuperados usando métodos de acessador especiais. Por exemplo:
em vez de chamar getAxisValue()
, os aplicativos podem chamar getX()
. Os eixos com acessadores integrados incluem AXIS_X
, AXIS_Y
,
AXIS_PRESSURE
, AXIS_SIZE
, AXIS_TOUCH_MAJOR
, AXIS_TOUCH_MINOR
, AXIS_TOOL_MAJOR
, AXIS_TOOL_MINOR
e AXIS_ORIENTATION
.
Cada dispositivo de entrada tem um ID exclusivo atribuído pelo sistema e também pode fornecer
várias fontes. Quando um dispositivo fornece várias fontes, mais de uma fonte
podem fornecer dados de eixo usando o mesmo eixo. Por exemplo, um evento de toque
da fonte de toque usa o eixo X para dados de posição da tela, enquanto um joystick
vindo da origem do joystick usará o eixo X para a posição do joystick
como alternativa. Por isso, é importante que os aplicativos interpretem os eixos
valores de acordo com a fonte de origem. Ao processar um movimento
os aplicativos usarão métodos no InputDevice
para determinar os eixos suportados por um dispositivo ou uma fonte. Especificamente:
os aplicativos podem usar getMotionRanges()
para consultar todos os eixos de um dispositivo ou todos os eixos de um determinado
origem do dispositivo. Em ambos os casos, as informações de intervalo dos eixos retornadas
o objeto InputDevice.MotionRange
especifica a origem das
para cada valor de eixo.
Por fim, já que os eventos de movimento de joysticks, gamepads, mouses e
trackballs não são eventos de toque, a plataforma adiciona um novo método de callback para
transmitindo-os para um View
como "genérico" eventos de movimento.
Especificamente, ele informa os eventos de movimento sem toque ao
View
s por uma chamada para onGenericMotionEvent()
, em vez de onTouchEvent()
.
A plataforma envia eventos de movimento genéricos de maneira diferente, dependendo da
classe de origem do evento. SOURCE_CLASS_POINTER
eventos
acessar o View
abaixo do ponteiro, da mesma forma que o toque
e outros eventos funcionam. Todos os outros vão para o View
em foco no momento.
Por exemplo, isso significa que uma View
precisa receber foco para
receber eventos de joystick. Se necessário, os aplicativos podem lidar com esses eventos no
nível de atividade ou caixa de diálogo implementando onGenericMotionEvent()
.
Para analisar um aplicativo de exemplo que usa o movimento do joystick eventos, consulte GameControllerInput e GameView.
API RTP
O Android 3.1 expõe uma API ao seu protocolo de transporte em tempo real (RTP, na sigla em inglês) integrado. que os aplicativos podem usar para gerenciar dados sob demanda ou interativos streaming. Especificamente, aplicativos que fornecem VOIP, push-to-talk, conferência e streaming de áudio podem usar a API para iniciar sessões e transmitir ou receber por qualquer rede disponível.
A API RTP está disponível no pacote android.net.rtp
. Turmas
incluem:
RtpStream
, a classe base dos streams que enviam e e receber pacotes de rede com payloads de mídia por RTP.AudioStream
, uma subclasse deRtpStream
que carrega payloads de áudio por RTP.AudioGroup
, um hub de áudio local para gerenciar e misturando o alto-falante, o microfone e oAudioStream
do dispositivo.AudioCodec
, que contém uma coleção de codecs que definido para umAudioStream
.
Para oferecer suporte a audioconferência e usos semelhantes, um aplicativo instancia duas classes como endpoints para o fluxo:
AudioStream
especifica um endpoint remoto e consiste de mapeamento de rede e umAudioCodec
configurado.AudioGroup
representa o endpoint local de um ou maisAudioStream
s. Mixes deAudioGroup
todas asAudioStream
s e, opcionalmente, interage com o dispositivo alto-falante e microfone ao mesmo tempo.
O uso mais simples envolve um único endpoint remoto e um endpoint local.
Para usos mais complexos, consulte as limitações descritas para
AudioGroup
:
Para usar a API RTP, os aplicativos devem solicitar a permissão do usuário:
declarando <uses-permission
android:name="android.permission.INTERNET">
nos arquivos de manifesto. Para adquirir o microfone do dispositivo, a permissão <uses-permission
android:name="android.permission.RECORD_AUDIO">
também é necessária.
Widgets de aplicativos redimensionáveis
A partir do Android 3.1, os desenvolvedores podem criar widgets de tela inicial redimensionáveis: horizontalmente, verticalmente ou em ambos os eixos. Os usuários tocam e seguram um para mostrar as alças de redimensionamento e arraste a horizontal e/ou vertical alças para mudar o tamanho na grade de layout.
Os desenvolvedores podem tornar qualquer widget da tela inicial redimensionável definindo um
atributo resizeMode
nos metadados AppWidgetProviderInfo
do widget. Os valores do atributo
O atributo resizeMode
inclui "horizontal", "vertical" e "nenhum".
Para declarar um widget como redimensionável horizontal e verticalmente, forneça o valor
"horizontal|vertical".
Veja um exemplo:
<appwidget-provider xmlns:android="http://schemas.android.com/apk/res/android" android:minWidth="294dp" android:minHeight="72dp" android:updatePeriodMillis="86400000" android:previewImage="@drawable/preview" android:initialLayout="@layout/example_appwidget" android:configure="com.example.android.ExampleAppWidgetConfigure" android:resizeMode="horizontal|vertical" > </appwidget-provider>
Para mais informações sobre widgets de tela inicial, consulte Widgets de apps. na documentação do Google Cloud.
Estrutura de animação
- Nova classe ViewPropertyAnimator.
- Uma nova classe
ViewPropertyAnimator
fornece um conveniente os desenvolvedores animam propriedades selecionadas em objetosView
. A classe automatiza e otimiza a animação das propriedades e facilita gerenciar várias animações simultâneas em um objetoView
.Usar o
ViewPropertyAnimator
é simples. Para animar propriedades para umView
, chameanimate()
para construa um objetoViewPropertyAnimator
para esseView
. Use o noViewPropertyAnimator
para especificar qual propriedade será e como fazer a animação. Por exemplo, para tornarView
transparente, chamealpha(0);
. O objetoViewPropertyAnimator
lida com os detalhes da configuração da classeAnimator
subjacente e da inicialização dela e, em seguida, renderiza o animação.
- Uma nova classe
- Cor do plano de fundo da animação
- Novos
getBackgroundColor()
e Os métodossetBackgroundColor(int)
permitem você recebe/define a cor do plano de fundo por trás das animações, para animações de janela . Atualmente, o plano de fundo precisa ser preto, com qualquer nível alfa desejado.
- Novos
- Recebendo fração animada de
ViewAnimator
- Um novo dispositivo
getAnimatedFraction()
método permite ver a fração da animação atual (o intervalo decorrido/interpolado) fração usada na atualização de frame mais recente: de umaValueAnimator
.
- Um novo dispositivo
Framework da interface
- Renderização forçada de uma camada
- Com um novo método
buildLayer()
, um aplicativo força a criação de uma camada de visualização e a renderização imediata da camada de visualização. Por exemplo, um aplicativo pode usar esse método para renderizar uma visualização nas suas antes de iniciar uma animação. Se a visualização for complexa, renderizá-la a camada antes de iniciar a animação evitará pular frames.
- Com um novo método
- Distância da câmera
- Os aplicativos podem usar um novo método
setCameraDistance(float)
para definir a distância a partir do câmera a uma visualização. Isso dá aos aplicativos maior controle sobre as transformações 3D de a visualização, como rotações.
- Os aplicativos podem usar um novo método
- Como receber uma visualização da agenda com um DatePicker
- Um novo método
getCalendarView()
. permite que você receba umCalendarView
de umDatePicker
instância.
- Um novo método
- Como receber callbacks quando as visualizações são removidas
- Com uma nova
View.OnAttachStateChangeListener
, você pode receber os callbacks quando uma visualização é anexada ou separada da janela. Usar oaddOnAttachStateChangeListener()
para adicionar um listener eaddOnAttachStateChangeListener()
para removê-lo.
- Com uma nova
- Listener de navegação estrutural do fragmento, nova assinatura onInflate()
- Um novo método,
setOnBreadCrumbClickListener()
, fornece um gancho para permitir os aplicativos interceptam cliques de navegação estrutural de fragmento e realizam as ações necessárias antes de ir para a entrada ou fragmento da backstack que foi clicado. - Na classe
Fragment
, o uso deonInflate(attrs, savedInstanceState)
foi descontinuado. UseonInflate(activity, attrs, savedInstanceState)
.
- Um novo método,
- Mostrar resultado da pesquisa em uma nova guia
- Uma chave de dados
EXTRA_NEW_SEARCH
para intentsACTION_WEB_SEARCH
permite abrir uma pesquisa em um em uma nova guia do navegador, em vez de em uma já existente.
- Uma chave de dados
- Cursor de texto drawable
- Agora é possível especificar um drawable para usar como o cursor de texto usando o novo
atributo de recurso
textCursorDrawable
.
- Agora é possível especificar um drawable para usar como o cursor de texto usando o novo
atributo de recurso
- Configuração mostrada dos filhos em visualizações remotas
- Um novo método de conveniência,
setDisplayedChild(viewId, childIndex)
, está disponível em subclassesRemoteViews
para permitem definir o filho exibido emViewAnimator
e SubclassesAdapterViewAnimator
, comoAdapterViewFlipper
,StackView
,ViewFlipper
eViewSwitcher
.
- Um novo método de conveniência,
- Teclas genéricas para gamepads e outros dispositivos de entrada
KeyEvent
adiciona um intervalo de códigos de tecla genéricos para acomodar botões de gamepad. A classe também adicionaisGamepadButton(int)
e várias outras métodos auxiliares para trabalhar com códigos de tecla.
Gráficos
- Auxiliares para gerenciar bitmaps
setHasAlpha(boolean)
permite que um app indique todos os pixels em um bitmap são conhecidos como opacos (falsos) ou que alguns os pixels podem conter valores alfa não opacos (verdadeiro). Para algumas configurações (como como RGB_565), essa chamada será ignorada, já que não oferece suporte ao alfa por pixel e a distribuição dos valores dos dados. Isso é uma dica de desenho, porque, em alguns casos, um bitmap conhecido ser opaco pode levar a um desenho mais rápido do que um modelo não opaco valores alfa por pixel.getByteCount()
recebe o tamanho de um bitmap em bytes.getGenerationId()
permite que um aplicativo encontre se um bitmap foi modificado, como para armazenamento em cache.sameAs(android.graphics.Bitmap)
determina se um determinado bitmap difere do bitmap atual, em dimensão, ou dados de pixel.
- Como definir a localização e a rotação da câmera
Camera
adiciona dois novos métodos,rotate()
esetLocation()
, para do local da câmera para transformações 3D.
Rede
- Bloqueio de Wi-Fi de alto desempenho
- Um novo bloqueio de Wi-Fi de alto desempenho permite que os aplicativos mantenham
conexões Wi-Fi de alto desempenho, mesmo quando a tela do dispositivo está desligada.
Os aplicativos que transmitem música, vídeo ou voz por longos períodos podem ter o
bloqueio de Wi-Fi de alto desempenho para garantir o desempenho da transmissão mesmo quando a tela
está desativado. Por usar mais energia, os aplicativos devem adquirir o
Wi-Fi de alto desempenho quando é necessário um dispositivo ativo de longa duração
uma conexão com a Internet.
Para criar um bloqueio de alto desempenho, transmita
WIFI_MODE_FULL_HIGH_PERF
como o modo de bloqueio em uma paracreateWifiLock()
.
- Um novo bloqueio de Wi-Fi de alto desempenho permite que os aplicativos mantenham
conexões Wi-Fi de alto desempenho, mesmo quando a tela do dispositivo está desligada.
Os aplicativos que transmitem música, vídeo ou voz por longos períodos podem ter o
bloqueio de Wi-Fi de alto desempenho para garantir o desempenho da transmissão mesmo quando a tela
está desativado. Por usar mais energia, os aplicativos devem adquirir o
Wi-Fi de alto desempenho quando é necessário um dispositivo ativo de longa duração
uma conexão com a Internet.
- Mais estatísticas de tráfego
- Os aplicativos agora podem acessar estatísticas sobre mais tipos de uso de rede
usando novos métodos em
TrafficStats
. Os aplicativos podem usar para obter estatísticas de UDP, contagem de pacotes, bytes de payload de transmissão/recebimento TCP e para um determinado UID.
- Os aplicativos agora podem acessar estatísticas sobre mais tipos de uso de rede
usando novos métodos em
- Nome de usuário de autenticação SIP
- Os aplicativos agora podem receber e definir o nome de usuário da autenticação SIP de um perfil
usando
os novos métodos
getAuthUserName()
esetAuthUserName()
.
- Os aplicativos agora podem receber e definir o nome de usuário da autenticação SIP de um perfil
usando
os novos métodos
Gerenciador de downloads
- Processamento de downloads concluídos
- Os aplicativos agora podem iniciar downloads que notificam os usuários apenas no
do projeto. Para iniciar esse tipo de download, os aplicativos transmitem
VISIBILITY_VISIBLE_NOTIFY_ONLY_COMPLETION
no métodosetNotificationVisibility()
de um objeto de solicitação. - Um novo método,
addCompletedDownload()
, permite que um aplicativo adicione um arquivo ao de downloads, para que possa ser gerenciado pelo aplicativo Downloads.
- Os aplicativos agora podem iniciar downloads que notificam os usuários apenas no
do projeto. Para iniciar esse tipo de download, os aplicativos transmitem
- Mostrar downloads classificados por tamanho
- Os aplicativos podem iniciar o aplicativo Downloads no modo de classificação por tamanho
adicionando o novo
INTENT_EXTRAS_SORT_BY_SIZE
extra a uma intentACTION_VIEW_DOWNLOADS
.
- Os aplicativos podem iniciar o aplicativo Downloads no modo de classificação por tamanho
adicionando o novo
Estrutura do IME
- Como receber a chave de valor extra de um método de entrada
- O
InputMethodSubtype
adiciona o métodocontainsExtraValueKey()
para verificar se uma string ExtraValue está armazenada para o subtipo e o métodogetExtraValueOf()
para extrair uma chave-valor específica do hashmap ExtraValue.
- O
Mídia
- Novos formatos de streaming de áudio
- O framework de mídia adiciona suporte integrado para conteúdo bruto ADTS AAC, streaming de áudio aprimorado, bem como suporte para áudio FLAC, para a mais alta qualidade conteúdo de áudio compactado (sem perda) Consulte os Formatos de mídia compatíveis para mais informações.
Iniciar controles ao parar aplicativos.
A partir do Android 3.1, o gerenciador de pacotes do sistema monitora aplicativos que estão em estado interrompido e fornecem meios de controlar o lançamento a partir de processos em segundo plano e outros aplicativos.
Observe que o estado interrompido de um aplicativo não é o mesmo que o estado estado interrompido. O sistema gerencia esses dois estados interrompidos separadamente.
A plataforma define duas novas flags de intent que permitem ao remetente especificar se a intent deve ter permissão para ativar componentes em pausas para o aplicativo.
FLAG_INCLUDE_STOPPED_PACKAGES
- Incluir filtros de intent de aplicativos interrompidos na lista de possíveis destinos resolver.FLAG_EXCLUDE_STOPPED_PACKAGES
- Excluir filtros de intent de aplicativos interrompidos da lista de possíveis de destino.
Quando nenhuma ou ambas as sinalizações são definidas em uma intent, o padrão comportamento é incluir filtros de aplicativos interrompidos na lista de e possíveis alvos.
O sistema adiciona FLAG_EXCLUDE_STOPPED_PACKAGES
a todas as transmissões
intents. Isso é feito para evitar que transmissões de serviços em segundo plano sejam
ao lançar inadvertidamente ou desnecessariamente componentes de aplicativos interrompidos.
Um serviço ou aplicativo de segundo plano pode substituir esse comportamento adicionando o
Sinalização FLAG_INCLUDE_STOPPED_PACKAGES
para transmitir
que podem ativar aplicativos interrompidos.
Os aplicativos ficam em estado interrompido quando são instalados pela primeira vez, mas não são já iniciados e interrompidos manualmente pelo usuário (em aplicativos).
Notificação de primeira inicialização e upgrade do aplicativo
A plataforma adiciona notificações aprimoradas sobre a primeira inicialização do aplicativo e com duas novas ações da intent:
ACTION_PACKAGE_FIRST_LAUNCH
: enviado para o pacote instalador de um aplicativo quando ele é iniciado pela primeira vez (ou seja, na primeira vez que ele é movido de um estado interrompido). Os dados contém o nome do pacote.ACTION_MY_PACKAGE_REPLACED
: notifica um aplicativo que foi atualizado, com uma nova versão instalada uma versão atual. Ela é enviada apenas para o aplicativo que foi substituído. Ela não contém dados adicionais. Para recebê-lo, declare um filtro de intent para esta ação. É possível usar a intent para acionar o código que ajuda a o aplicativo volta a funcionar corretamente depois de um upgrade.Essa intent é enviada diretamente ao aplicativo, mas somente se o aplicativo recebeu upgrade enquanto estava no estado iniciado (não em estado interrompido).
Principais utilitários
- Cache LRU
- Uma nova classe
LruCache
permite que seus aplicativos se beneficiem de armazenamento em cache eficiente. Os aplicativos podem usar a classe para reduzir o tempo gasto computação ou download de dados da rede, mantendo ao mesmo tempo consumo de memória para os dados em cache.LruCache
é um cache que contém referências fortes a um número limitado de valores. Cada vez que um valor é acessado, ele é movido para o início de uma fila. Quando um valor é adicionado a uma cache, o valor no final dessa fila é removido e pode se tornar qualificado para coleta de lixo.
- Uma nova classe
- Descritor do arquivo como
int
- Agora você pode receber o descritor de arquivo nativo int para uma
ParcelFileDescriptor
usando um dos novos métodosgetFd()
oudetachFd()
.
- Agora você pode receber o descritor de arquivo nativo int para uma
WebKit
- Cookies do esquema de arquivos
- A
CookieManager
agora oferece suporte a cookies que usam as Esquema de URIfile:
. Você pode usarsetAcceptFileSchemeCookies()
para ativar/desativar o suporte a cookies de esquema de arquivos antes de criar uma instância deWebView
ouCookieManager
. Em umCookieManager
, é possível verificar se os cookies do esquema de arquivos é ativado chamandoallowFileSchemeCookies()
.
- A
- Notificação de solicitação de login
- Para oferecer suporte aos recursos de login automático do navegador introduzidos no Android 3.0, a
novos
método
onReceivedLoginRequest()
notifica o host de que uma solicitação de login automático do usuário foi processada.
- Para oferecer suporte aos recursos de login automático do navegador introduzidos no Android 3.0, a
novos
método
- Classes e interfaces removidas
- Várias classes e interfaces foram removidas da API pública, após estavam em estado descontinuado. Consulte a API de diferenças para mais informações.
Navegador
O aplicativo Navegador adiciona os seguintes recursos para dar suporte à aplicativos:
- Suporte para reprodução inline de vídeo incorporado em HTML5
<video>
. A reprodução é acelerada por hardware sempre que possível. - Suporte a camadas para elementos de posição fixa em todos os sites (dispositivos móveis e computador).
Novas constantes de recurso
A plataforma adiciona novas constantes de recurso de hardware que os desenvolvedores podem declarar
nos manifestos dos aplicativos, para informar entidades externas, como o Google
Reproduzir os requisitos do aplicativo para novos recursos de hardware com suporte
nesta versão da plataforma. Os desenvolvedores declaram esses e outros recursos
constantes em elementos de manifesto <uses-feature>
.
android.hardware.usb.accessory
: o aplicativo usa a porta USB API para comunicação com dispositivos de hardware externos conectados por USB e que funcionem como hosts.android.hardware.usb.host
: o app usa a API USB. para se comunicar com dispositivos de hardware externos conectados por USB e funcionar como dispositivos.
O Google Play filtra os aplicativos com base nos recursos declarados nos elementos de manifesto <uses-feature>
. Para mais informações sobre
declarar recursos em um manifesto de aplicativo, leia Google Play
Filtros.
Relatório de diferenças da API
Para obter uma visão detalhada de todas as mudanças de API no Android 3.1 (API Nível 12), consulte a API Relatório de diferenças.
Nível da API
A plataforma Android 3.1 oferece uma versão atualizada do a API do framework. A API do Android 3.1 recebe um identificador inteiro, 12: 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 as APIs introduzidas no Android 3.1 em seu aplicativo,
você precisa compilar o aplicativo na biblioteca Android fornecida no
a plataforma do SDK do Android 3.1. Dependendo das suas necessidades,
pode
também é necessário adicionar um android:minSdkVersion="12"
ao elemento <uses-sdk>
na classe
manifesto do aplicativo.
Para mais informações, leia O que é a API Nível?