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.
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.
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.
James Montemagno
Principal Lead Program Manager, .NET Community
Siga