Consulta e Interaja com aplicativos no Android 11 com Visibilidade de Pacotes

Avatar

James

>

15 de outubro de 2020

Android 11 introduziu várias atualizações empolgantes para os desenvolvedores integrarem em sua experiência com aplicativos, incluindo novos dispositivos e controles de mídia, suporte aprimorado para dobráveis e muito mais. Além dos novos recursos, há também várias melhorias de privacidade que os desenvolvedores precisam integrar em seus aplicativos quando atualizarem e redirecionarem para o Android 11. Uma dessas melhorias é a introdução da visibilidade de pacotes que altera a capacidade de consultar aplicativos e pacotes instalados em um dispositivo do usuário.

Ícones de aplicativos de e-mail e código para consultar intenções no dispositivo

Quando você quiser abrir um navegador ou enviar um e-mail, seu aplicativo terá que iniciar e interagir com outro aplicativo no dispositivo através de um Intent. Antes de ligar para StartActivity é uma boa prática para QueryIntentActivities ou ResolveActivity para garantir que existe uma aplicação que possa lidar com o pedido. Se você está usando Xamarin.Essentials, então você pode não ter visto essas APIs porque a biblioteca lida com toda a lógica para você automaticamente para Browser(External), Email, e SMS.

Antes de usar o Android 11 cada aplicativo poderia facilmente consultar todos os aplicativos instalados e ver se um específico Intent abriria quando StartActivity fosse chamado. Tudo isso mudou com o Android 11 com a introdução da visibilidade do pacote. Agora você precisará declarar quais intenções e esquemas de dados você quer que seu aplicativo seja capaz de consultar quando seu aplicativo estiver tendo como alvo o Android 11.

Configurações do projeto Android 11

Após você redirecionar para o Android 11 e executar seu aplicativo em um dispositivo rodando Android 11 você receberá zero resultados se você usar QueryIntentActivities. Se você estiver usando Xamarin.Essentials você receberá um FeatureNotSupportedException quando você tentar chamar uma das APIs que precisa consultar atividades. Digamos que você está usando o recurso de e-mail do Xamarin.Essentials. Seu código pode se parecer com isto:

public async Task SendEmail(string subject, string body, List<string> recipients){ try { var message = new EmailMessage { Subject = subject, Body = body, To = recipients }; await Email.ComposeAsync(message); } catch (FeatureNotSupportedException fbsEx) { // Email is not supported on this device } catch (Exception ex) { // Some other exception occurred }}

Se seu aplicativo tivesse como alvo o Android 10 e anteriores, ele simplesmente funcionaria. Com a visibilidade do pacote no Android 11 quando você tentar enviar um e-mail, o Xamarin.Essentials tentará consultar os pacotes que suportam e-mail e zero resultados serão devolvidos. Isso resultará em um FeatureNotSupportedException a ser jogado, o que não é o ideal. Para habilitar sua aplicação para obter visibilidade nos pacotes você precisará adicionar uma lista de queries no seu AndroidManifest.xml.

<manifest package="com.mycompany.myapp"> <queries> <intent> <action android:name="android.intent.action.SENDTO" /> <data android:scheme="mailto" /> </intent> </queries></manifest>

Se você precisar consultar várias intenções ou usar várias APIs, você precisará adicionar todas elas na lista.

<queries> <intent> <action android:name="android.intent.action.SENDTO" /> <data android:scheme="mailto" /> </intent> <intent> <action android:name="android.intent.action.VIEW" /> <data android:scheme="http"/> </intent> <intent> <action android:name="android.intent.action.VIEW" /> <data android:scheme="https"/> </intent> <intent> <action android:name="android.intent.action.VIEW" /> <data android:scheme="smsto"/> </intent></queries>

E aí você tem, com apenas uma pequena quantidade de configuração que você é app continuará a funcionar impecavelmente quando você tiver como alvo o Android 11.

Aprenda Mais

Certifique-se de navegar pela documentação oficial do Android 11 sobre visibilidade de pacotes, e, claro, a documentação Xamarin.Essentials recentemente atualizada. Finalmente, não deixe de ler as notas de lançamento do Xamarin.Android 11.

Avatar
James Montemagno

Principal Lead Program Manager, .NET Community

Siga

Deixe um comentário