Nível da API:13
O Android 3.2 (HONEYCOMB_MR2
) é uma versão incremental da plataforma que adiciona novos
recursos para usuários e desenvolvedores. As seções abaixo apresentam uma visão geral
dos novos recursos e APIs para desenvolvedores.
Para desenvolvedores, a plataforma Android 3.2 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 mais. Para começar a desenvolver ou testar no Android 3.2, use o Android SDK Manager para fazer o download da plataforma no seu SDK.
Destaques da plataforma
Novos recursos para usuários
- Otimizações para uma variedade maior de tablets
O Android 3.2 inclui uma variedade de otimizações em todo o sistema para garantir uma ótima experiência do usuário em uma variedade maior de tablets.
- Zoom de compatibilidade para apps de tamanho fixo
O Android 3.2 apresenta um novo modo de zoom de compatibilidade que oferece aos usuários uma nova maneira de visualizar apps de tamanho fixo em dispositivos maiores. O novo modo oferece uma alternativa com escala de pixels para o alongamento de interface padrão de apps que não foram projetados para funcionar em telas maiores, como tablets. O novo modo é acessível aos usuários por um ícone de menu na barra do sistema para apps que precisam de suporte à compatibilidade.
- Sincronização de mídia do cartão SD
Em dispositivos compatíveis com um cartão SD, os usuários agora podem carregar arquivos de mídia diretamente do cartão SD para os apps que os usam. Uma facilidade do sistema torna os arquivos acessíveis aos apps do armazenamento de mídia do sistema.
Novos recursos para desenvolvedores
- API estendida para suporte a telas de gerenciamento
O Android 3.2 apresenta extensões à API de suporte à tela da plataforma para oferecer aos desenvolvedores mais maneiras de gerenciar a interface do aplicativo em uma ampla gama de dispositivos Android. A API inclui novos qualificadores de recursos e novos atributos de manifesto que oferecem um controle mais preciso sobre como os apps são exibidos em tamanhos diferentes, em vez de depender de categorias de tamanho generalizadas.
Para garantir a melhor exibição possível para apps de tamanho fixo e apps com suporte limitado a vários tamanhos de tela, a plataforma também oferece um novo modo de compatibilidade de zoom que renderiza a interface em uma área de tela menor e, em seguida, a redimensiona para preencher o espaço disponível na tela. Para mais informações sobre a API de suporte à tela e os controles que ela oferece, consulte as seções abaixo.
Visão geral da API
APIs de suporte a telas
O Android 3.2 apresenta novas APIs de suporte a telas que oferecem mais controle sobre como os aplicativos são exibidos em diferentes tamanhos de tela. A API é baseada na API de suporte a telas existente, incluindo o modelo de densidade de tela generalizada da plataforma, mas a estende com a capacidade de segmentar com precisão intervalos de tela específicos pelas dimensões, medidas em unidades de pixel independentes de densidade (como 600 dp ou 720 dp de largura), em vez de pelos tamanhos de tela generalizados (como grande ou extragrande).
Ao projetar a interface de um aplicativo, você ainda pode contar com a plataforma para fornecer abstração de densidade, o que significa que os aplicativos não precisam compensar as diferenças na densidade real de pixels entre os dispositivos. É possível projetar a interface do aplicativo de acordo com a quantidade de espaço horizontal ou vertical disponível. A plataforma expressa a quantidade de espaço disponível usando três novas características: smallestWidth, width e height.
- A smallestWidth de uma tela é o tamanho mínimo fundamental, medido em unidades de pixel de densidade independente ("dp"). Da altura ou largura da tela, é a menor das duas. Para uma tela na orientação retrato, a smallestWidth é normalmente baseada na largura, enquanto na orientação paisagem ela é baseada na altura. Em todos os casos, o valor smallestWidth é derivado de uma característica fixa da tela, e o valor não muda, independentemente da orientação. A smallestWidth é importante para aplicativos porque representa a menor largura possível em que a interface do aplicativo precisa ser renderizada, sem incluir áreas da tela reservadas pelo sistema.
- Por outro lado, a largura e a altura de uma tela representam o espaço horizontal ou vertical atual disponível para o layout do aplicativo, medido em unidades de "dp", sem incluir áreas da tela reservadas pelo sistema. A largura e altura de uma tela mudam quando o usuário alterna a orientação entre paisagem e retrato.
A API de suporte a novas telas foi projetada para permitir que você gerencie a interface do aplicativo de acordo com a smallestWidth da tela atual. Você também pode gerenciar a interface de acordo com a largura ou altura atual, conforme necessário. Para essas finalidades, a API oferece as seguintes ferramentas:
- Novos qualificadores de recursos para segmentar layouts e outros recursos para uma largura, altura ou smallestWidth mínima, e
- Novos atributos de manifesto para especificar o intervalo máximo de compatibilidade da tela do app
Além disso, os aplicativos ainda podem consultar o sistema e gerenciar o carregamento da interface e de recursos no ambiente de execução, como nas versões anteriores da plataforma.
Como a nova API permite segmentar telas de forma mais direta usando smallestWidth, width e height, é útil entender as características típicas dos diferentes tipos de tela. A tabela abaixo fornece alguns exemplos, medidos em unidades "dp".
Tabela 1. Dispositivos típicos, com densidade e tamanho em dp.
Tipo | Densidade (geral) | Dimensões (dp) | Menor largura (dp) |
---|---|---|---|
Telefone de referência | mdpi | 320x480 | 320 |
Tablet pequeno/smartphone grande | mdpi | 480x800 | sobreposição ou |
Tablet de 7 polegadas | mdpi | 600 x 1.024 | 600 |
tablet de 10'' | mdpi | 800 x 1.280 | 800 |
As seções abaixo oferecem mais informações sobre os novos qualificadores de tela e atributos de manifesto. Para informações completas sobre como usar a API de suporte à tela, consulte Suporte a várias telas.
Novos qualificadores de recursos para suporte a telas
Os novos qualificadores de recurso no Android 3.2 permitem segmentar melhor seus layouts para intervalos de tamanhos de tela. Com os qualificadores, é possível criar configurações de recursos projetadas para um valor mínimo específico de "menor largura", "largura atual" ou "altura atual", medidas em pixels de densidade independente.
Os novos qualificadores são:
swNNNdp
: especifica a smallestWidth mínima em que o recurso precisa ser usado, medida em unidades de "dp". Como mencionado acima, a smallWidth de uma tela é constante, independente da orientação. Exemplos:sw320dp
,sw720dp
,sw720dp
.wNNNdp
ehNNNdp
: especificam a largura ou altura mínima em que o recurso precisa ser usado, medida em unidades "dp". Como mencionado acima, a largura e a altura de uma tela são relativas à orientação da tela e mudam sempre que a orientação muda. Exemplos:w320dp
,w720dp
,h1024dp
.
Também é possível criar várias configurações de recursos sobrepostos, se necessário. Por exemplo, você pode marcar alguns recursos para uso em qualquer tela com mais de 480 dp, outros para mais de 600 dp e outros para mais de 720 dp. Quando várias configurações de recursos são qualificadas para uma determinada tela, o sistema seleciona a configuração mais próxima. Para controlar com precisão quais recursos são carregados em uma determinada tela, você pode marcar recursos com um qualificador ou combinar vários qualificadores novos ou existentes.
Com base nas dimensões típicas listadas anteriormente, veja alguns exemplos de como você pode usar os novos qualificadores:
res/layout/main_activity.xml # For phones res/layout-sw600dp/main_activity.xml # For 7” tablets res/layout-sw720dp/main_activity.xml # For 10” tablets res/layout-w600dp/main_activity.xml # Multi-pane when enough width res/layout-sw600dp-w720dp/main_activity.xml # For large width
As versões mais antigas da plataforma vão ignorar os novos qualificadores. Assim, você pode misturá-los conforme necessário para garantir que o app tenha uma ótima aparência em qualquer dispositivo. Veja alguns exemplos:
res/layout/main_activity.xml # For phones res/layout-xlarge/main_activity.xml # For pre-3.2 tablets res/layout-sw600dp/main_activity.xml # For 3.2 and up tablets
Para informações completas sobre como usar os novos qualificadores, consulte Usar novos qualificadores de tamanho.
Novos atributos de manifesto para compatibilidade com tamanhos de tela
O framework oferece um novo conjunto de atributos de manifesto <supports-screens>
que permitem
gerenciar o suporte do app a diferentes tamanhos de tela.
Especificamente, é possível especificar as telas maiores e menores em que o app
foi projetado para ser executado, bem como a tela maior em que ele foi projetado para ser executado
sem precisar do novo modo de compatibilidade
da tela do sistema. Assim como os qualificadores de recurso descritos acima, os novos
atributos de manifesto especificam o intervalo de telas com suporte do aplicativo,
conforme especificado pela função reduzir.
Os novos atributos de manifesto para suporte a telas são:
android:compatibleWidthLimitDp="numDp"
: esse atributo permite especificar a smallestWidth máxima em que o aplicativo pode ser executado sem precisar do modo de compatibilidade. Se a tela atual for maior que o valor especificado, o sistema vai mostrar o aplicativo no modo normal, mas permitirá que o usuário alterne para o modo de compatibilidade usando uma configuração na barra do sistema.android:largestWidthLimitDp="numDp"
: esse atributo permite especificar a smallestWidth máxima em que o aplicativo foi projetado para ser executado. Se a tela atual for maior que o valor especificado, o sistema forçará o aplicativo a entrar no modo de compatibilidade da tela para garantir a melhor exibição na tela atual.android:requiresSmallestWidthDp="numDp"
: esse atributo permite especificar a smallestWidth mínima em que o aplicativo pode ser executado. Se a tela atual for menor que o valor especificado, o sistema considerará o aplicativo incompatível com o dispositivo, mas não impedirá a instalação e a execução dele.
Observação:no momento, o Google Play não filtra
apps com base em nenhum dos atributos acima. O suporte à filtragem será
adicionado em uma versão posterior da plataforma. Os aplicativos que exigem
filtragem com base no tamanho da tela podem usar os atributos <supports-screens>
existentes.
Para informações completas sobre como usar os novos atributos, consulte Declarar suporte ao tamanho da tela.
Modo de compatibilidade da tela
O Android 3.2 fornece um novo modo de compatibilidade de tela para aplicativos que declaram explicitamente que não oferecem suporte a telas tão grandes quanto a em que estão sendo executados. Esse novo modo de "zoom" é dimensionado em pixels. Ele renderiza o aplicativo em uma área de tela menor e, em seguida, dimensiona os pixels para preencher a tela atual.
Por padrão, o sistema oferece o modo de compatibilidade de tela como uma opção do usuário para apps que exigem isso. Os usuários podem ativar e desativar o modo de zoom usando um controle disponível na barra do sistema.
Como o novo modo de compatibilidade de tela pode não ser adequado para todos os aplicativos, a plataforma permite que o aplicativo o desative usando atributos do manifesto. Quando desativado pelo app, o sistema não oferece o modo de compatibilidade "zoom" como uma opção para os usuários quando o app está em execução.
Observação:para informações importantes sobre como controlar o modo de compatibilidade nos seus apps, consulte o artigo Novo modo para apps em telas grandes no blog Android Developers.
Nova densidade de tela para TVs 720p e dispositivos semelhantes
Para atender às necessidades de aplicativos executados em TVs de 720p ou similares com
telas de densidade moderada, o Android 3.2 apresenta uma nova densidade generalizada,
tvdpi
, com um dpi aproximado de 213. Os aplicativos podem consultar
a nova densidade em densityDpi
e usar
o novo qualificador tvdpi
para marcar recursos para TVs e
dispositivos semelhantes. Exemplo:
res/drawable-tvdpi/my_icon.png # Bitmap for tv density
Em geral, os aplicativos não precisam trabalhar com essa densidade. Em situações em que a saída é necessária para uma tela de 720p, os elementos da interface podem ser dimensionados automaticamente pela plataforma.
Framework de interface
- Fragmentos
- A nova classe
Fragment.SavedState
contém as informações de estado recuperadas de uma instância de fragmento porsaveFragmentInstanceState()
. - O novo método
saveFragmentInstanceState()
salva o estado atual da instância do fragmento especificado. O estado pode ser usado mais tarde ao criar uma nova instância do fragmento que corresponde ao estado atual. - O novo método
setInitialSavedState()
define o estado salvo inicial de um fragmento quando ele é criado pela primeira vez. - O novo método de callback
onViewCreated()
notifica o fragmento queonCreateView()
returnou, mas antes que qualquer estado salvo seja restaurado na visualização. - O método
isDetached()
determina se o fragmento foi explicitamente removido da interface. - Os novos métodos
attach()
edetach()
permitem que um aplicativo reanexe ou remova fragmentos na IU. - Um novo método de sobrecarga
setCustomAnimations()
permite definir recursos de animação específicos para operações de entrada/saída e, especificamente, quando a pilha de retorno é aberta. A implementação atual não considera o comportamento diferente dos fragmentos ao abrir a backstack.
- A nova classe
- Informações sobre o tamanho da tela em ActivityInfo e ApplicationInfo
ActivityInfo
adicionaCONFIG_SCREEN_SIZE
eCONFIG_SMALLEST_SCREEN_SIZE
como máscaras de bits emconfigChanges
. Os bits indicam se uma atividade pode processar o tamanho da tela e o tamanho mínimo da tela.ApplicationInfo
adicionalargestWidthLimitDp
,compatibleWidthLimitDp
e camposrequiresSmallestWidthDp
, derivados dos atributos<supports-screens>
correspondentes no arquivo de manifesto do aplicativo.
- Ajudantes para receber o tamanho da tela do WindowManager
- Os novos métodos
getSize()
egetRectSize()
permitem que os aplicativos recebam o tamanho bruto da tela.
- Os novos métodos
- Novos estilos "holográficos" públicos
- Agora, a plataforma expõe uma variedade de estilos "holográficos" públicos
para texto, widgets da barra de ações, guias e muito mais. Consulte
R.style
para ver a lista completa.
- Agora, a plataforma expõe uma variedade de estilos "holográficos" públicos
para texto, widgets da barra de ações, guias e muito mais. Consulte
LocalActivityManager
,ActivityGroup
eLocalActivityManager
foram descontinuados- Os novos apps precisam usar fragmentos em vez dessas classes. Para continuar sendo executado em versões mais antigas da plataforma, use a Biblioteca de Suporte v4 (biblioteca de compatibilidade), disponível no SDK do Android. A Biblioteca de Suporte v4 oferece uma versão da API Fragment compatível com o Android 1.6 (nível 4 da API).
- Para apps desenvolvidos para Android 3.0 (nível da API
11) ou mais recente, as guias geralmente são apresentadas na interface usando o novo
ActionBar.newTab()
e APIs relacionadas para colocar guias na área da barra de ações.
Estrutura de mídia
- Os aplicativos que usam o provedor de mídia da plataforma (
MediaStore
) agora podem ler dados de mídia diretamente do cartão SD removível, quando compatível com o dispositivo. Os aplicativos também podem interagir diretamente com os arquivos do cartão SD usando a API MTP.
Gráficos
- Utilitários parceláveis em Point e PointF
- As classes
Point
ePointF
agora incluem a interfaceParcelable
e os métodos utilitáriosdescribeContents()
,readFromParcel()
ewriteToParcel()
.
- As classes
Framework IME
- Novo método
getModifiers()
para recuperar o estado atual das teclas modificadoras.
Framework USB
- Novo método
getRawDescriptors()
para extrair os descritores USB brutos do dispositivo. É possível usar o método para acessar descritores sem suporte direto pelas APIs de nível mais alto.
Rede
- Constantes de tipo de rede
ConnectivityManager
adiciona as constantesTYPE_ETHERNET
eTYPE_BLUETOOTH
.
Telefonia
- Nova constante de tipo de rede
NETWORK_TYPE_HSPAP
.
Principais utilitários
- Utilitários parceláveis
- A nova interface
Parcelable.ClassLoaderCreator
permite que o aplicativo receba o ClassLoader em que o objeto está sendo criado. - Novas funções
adoptFd
,dup()
efromFd()
para gerenciar objetosParcelFileDescriptor
.
- A nova interface
- Binder e IBinder
- O novo método
dumpAsync()
emBinder
eIBinder
permite que os aplicativos façam um despejo em um arquivo especificado, garantindo que o destino seja executado de forma assíncrona. - O novo código de transação de protocolo
TWEET_TRANSACTION
IBinder
permite que os aplicativos enviem um tweet para o objeto de destino.
- O novo método
Novas constantes de recurso
A plataforma adiciona novas constantes de recursos de hardware que podem ser declaradas
nos manifestos do aplicativo para informar entidades externas, como o Google
Play, sobre os recursos de hardware e software necessários. Declare essas
e outras constantes de recursos nos elementos do manifesto <uses-feature>
.
O Google Play filtra os aplicativos com base nos atributos <uses-feature>
para garantir que eles só estejam disponíveis para dispositivos que atendam aos requisitos.
- Constantes de recursos para requisitos de paisagem ou retrato
O Android 3.2 apresenta novas constantes de recursos que permitem que os aplicativos especifiquem se precisam de exibição na orientação paisagem, retrato ou ambas. A declaração dessas constantes indica que o aplicativo não pode ser instalado em um dispositivo que não oferece a orientação associada. Por outro lado, se uma ou ambas as constantes não forem declaradas, isso indica que o aplicativo não tem uma preferência pelas orientações não declaradas e pode ser instalado em um dispositivo que não as oferece.
android.hardware.screen.landscape
: o aplicativo exige exibição na orientação paisagem.android.hardware.screen.portrait
: o aplicativo exige exibição na orientação retrato.
Um aplicativo típico que funciona corretamente nas orientações de paisagem e retrato normalmente não precisa declarar um requisito de orientação. Em vez disso, um aplicativo projetado principalmente para uma orientação, como um aplicativo projetado para uma televisão, pode declarar uma das constantes para garantir que ela não esteja disponível para dispositivos que não fornecem essa orientação.
Se alguma das atividades declaradas no manifesto solicitar que ela seja executada em uma orientação específica, usando o atributo
android:screenOrientation
, isso também declarará que o aplicativo exige essa orientação. - Outras constantes de elemento
android.hardware.faketouch.multitouch.distinct
: o aplicativo exige suporte à entrada multitoque emulada com rastreamento distinto de dois ou mais pontos.android.hardware.faketouch.multitouch.jazzhand
: o aplicativo exige suporte à entrada de multitoque emulado com rastreamento distinto de cinco ou mais pontos.
Relatório de diferenças da API
Para conferir uma visão detalhada de todas as mudanças de API no Android 3.2 (nível 13 da API), consulte o Relatório de diferenças de API.
Nível da API
A plataforma Android 3.2 oferece uma versão atualizada da API do framework. A API do Android 3.2 é designada com um identificador de número inteiro, 13, que é armazenado no próprio sistema. Esse identificador, chamado de "nível de 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.2 no seu aplicativo,
você precisa compilá-lo na biblioteca do Android fornecida na
plataforma do SDK do Android 3.2. Dependendo das suas necessidades, talvez
seja necessário adicionar um atributo android:minSdkVersion="13"
ao elemento <uses-sdk>
no manifesto
do aplicativo.
Para mais informações, leia O que é o nível da API?