Todos os artigos

Principais novidades do Android 11 para quem desenvolve aplicativos

Android 11

Android 11 Developer Preview -Fonte: 9to5Google

Em fevereiro de 2020 foi lançada a primeira versão do Android 11 Developer Preview que já veio com diversas novidades. Como de costume, as proteções aos dados do usuário passaram por melhorias, assim como também novas formas de engajá-lo no uso do app. Uma das principais mudanças é o suporte ao 5G, essa nova tecnologia que todos nós estamos ansiosos pra chegar. Além disso também terá suporte nativo extendido para dispositivos dobráveis.

Enfim tem diversas novidades legais para os usuários do android, o que é incrível! Mas isso significa também mudanças no desenvolvimento de aplicativos da plataforma. Neste artigo vou listar algumas das questões mais significativas em relação a nova versão do sistema operacional.

Armazenamento por escopo

Desde o Android 10, está disponível aos aplicativos uma forma de acesso ao armazenamento externo estruturada e apenas dentro do escopo dos mesmos. Porém este tipo de implementação era apenas recomendada, não obrigatória.

Agora, o acesso aos arquivos externos será apenas por escopo. Antes de fazer a migração pro Android 11, precisa migrar seus arquivos para um diretório com escopo habilitado para o seu app.

Nesse caso, o ideal é que você tenha os arquivos dentro de um diretório específico do aplicativo. Para essa mudança não quebrar os aplicativos, podemos usar por enquanto a opção requestLegacyExternalStorage para acessar os arquivos externos.

Saiba mais sobre o armazenamento por escopo na documentação.

Permissões únicas

A partir do Android 11, sempre que seu aplicativo pedir permissões de localização, microfone ou camera o usuário terá uma opção ”Apenas dessa vez” que vai garantir o acesso temporário ao recurso necessário.

Dialog de permissão

Dialog de permissão - Fonte: Google

O tempo em que o app tem acesso ao recurso depende de alguns fatores:

  1. Enquanto o app está ativo e visível
  2. Se o app muda para background, mas por um curto período de tempo
  3. Se um serviço de primeiro plano é lançado enquanto uma activity está visível, e depois o usuário move o app para o background, o recurso estará disponível até que o serviço finalize.
  4. Se durante um desses casos acima o usuário revogar a permissão única, o aplicativo não consegue mais acessar o recurso.

Se você já segue as boas práticas de permissão em tempo de execução, é muito provável que não precise alterar nada via código, mas é importante sabermos sobre esse novo funcionamento!

Saiba mais sobre permissões únicas na documentação.

Acesso a localização em background

A partir do Android 11, não é mais possível o usuário garantir acesso a localização diretamente por aquele dialog de permissão padrão. Agora será necessário mostrar uma tela explicando o porque você precisa dessa permissão.

Para o caso dos apps que tem o targetSdk 11 será necessário criar uma tela que deixe bem claro o motivo de usar os dados de localização do usuário em background. Nesse caso, o primeiro passo é obter permissão para acesso a localização em primeiro plano (ACCESS_COARSE_LOCATION ou ACCESS_FINE_LOCATION). Após obtida a permissão, precisa mostrar a interface pro usuário as funcionalidades que vão utilizar a localização em segundo plano(ACCESS_BACKGROUND_LOCATION). Nesta tela o usuário deverá ter duas opções:

  • Permitir o acesso: só então pede o acesso a permissão ACCESS_BACKGROUND_LOCATION que irá abrir as configurações do app para o usuário permitir o acesso por lá.
  • Recusar o acesso: o usuário deve conseguir continuar a acessar o aplicativo sem mudanças repentinas de funcionamento.

No caso de aplicativos que tem targetSdk 10 ou inferior, precisa mostrar uma interface nativa do sistema para dar acesso a permissão ACCESS_BACKGROUND_LOCATION. Essa tela tem basicamente as mesmas informações citadas anteriormente, mas é uma tela pronta, sem possibilidade de customização.

Dialog de permissão background

Dialog permissão de localização em background — Fonte: Google

Para saber mais sobre acesso a localização em background, veja na documentação.

Tipos de serviços em primeiro plano

Desde o Android 9, o acesso a câmera e microfone estão restritos ao primeiro plano. E, como vimos anteriormente, agora terão diversas limitações também para o uso de localização em segundo plano.

Para protejer ainda mais os usuários, a partir do Android 11, é necessário determinar o tipo de dado que o serviço irá consumir. Por exemplo:

<manifest>
    ...
    <service ...
        android:foregroundServiceType="location|camera|microphone"/>
</manifest>

Para saber mais, veja na documentação.

Conversas

A partir do Android 11, as conversas (chats) terão um “tratamento” especial, principalmente através de uma área própria dentro da lista de notificações. Além disso essas notificações de conversas terão funcionalidades extras no click longo do usuário como criar um atalho para a conversa, marcar como importante ou silenciar.

Para implementar essas novas notificações, é necessário configurar os atalhos das conversas através do ShortcutManager e então tratar uma notificação que chega da conversa através do MessagingStyle com link para o atalho da conversa.

Bubbles

Você já precisou fazer aquelas bolinhas flutuantes do Messenger do Facebook? Pois é, agora no Android 11 é possível ter esse comportamento nativo! Bubbles é um componente construído dentro do sistema de notificações que flutua sobre os outros aplicativos e podem se expandir para mostrar algum conteúdo do aplicativo e ser recolhido quando não está sendo usado. Para mostrar os Bubbles, os usuários precisam permitir essa funcionalidade.

Bubbles exemplo

Exemplo do funcionamento das Bubbles — Fonte: Google

É possível criar Bubbles através da API de Notificação do android e é bem simples. Basta criar uma notificação como normalmente fazemos e configurar BubbleMetadata

// Create bubble intent
val target = Intent(context, BubbleActivity::class.java)
val bubbleIntent = PendingIntent.getActivity(context, 0, target, 0)

// Create bubble metadata
val bubbleData = Notification.BubbleMetadata.Builder()
    .setDesiredHeight(600)
    .setIcon(Icon.createWithResource(context, R.drawable.icon))
    .setIntent(bubbleIntent)
    .build()

// Create notification
val builder = Notification.Builder(context, CHANNEL_ID)
    .setContentIntent(contentIntent)
    .setSmallIcon(smallIcon)
    .setBubbleMetadata(bubbleData)

Para mostrar o conteúdo da “bolha” é necessário configurar uma Activity que seja resizeable e embedded. Assim, o sistema consegue configurar a notificação Bubble com essa Activity como target.

<activity
  android:name=".bubbles.BubbleActivity"
  android:theme="@style/AppTheme.NoActionBar"
  android:label="@string/title_activity_bubble"
  android:allowEmbedded="true"
  android:documentLaunchMode="always"
  android:resizeableActivity="true"
/> 

Para saber mais sobre Bubbles veja na documentação.


Então é isso, pessoal!

A cada ano crescem as medidas de segurança e as limitações ao uso desenfreado dos recursos do dispositivo e isso é muito bom tanto para os usuários quanto para nós que desenvolvemos aplicativos porque nos faz repensar nossas implementações e a necessidade dos dados.

Outra questão é que maioria das atualizações do android podem afetar quase todos os aplicativos, mas se já for seguido as boas práticas e documentações oficiais, normalmente não tem grande impacto no código em si.

A nova versão do android virá com diversas funcionalidades legais e percebemos cada vez mais a maturidade do sistema operacional. Vamos aguardar ansiosamente o lançamento.


Agradecimento especial ao Luis por revisar esse texto ❤