Dotazování a interakce s aplikacemi v Androidu 11 s viditelností balíčků

Avatar

James

15. října 2020

Android 11 představil několik zajímavých aktualizací, které mohou vývojáři integrovat do svých aplikací, včetně nových ovládacích prvků zařízení a médií, rozšířené podpory skládacích zařízení a mnoha dalších. Kromě nových funkcí existuje také několik vylepšení ochrany osobních údajů, které musí vývojáři při aktualizaci a opětovném cílení na Android 11 integrovat do svých aplikací. Jedním z těchto vylepšení je zavedení viditelnosti balíčků, která mění možnost dotazovat se na nainstalované aplikace a balíčky v zařízení uživatele.

Ikony aplikací pro e-mailové aplikace a kód pro dotazování záměrů v zařízení

Když chcete otevřít prohlížeč nebo odeslat e-mail, pak se vaše aplikace bude muset spustit a komunikovat s jinou aplikací v zařízení prostřednictvím Intent. Před voláním StartActivity je nejlepší postup QueryIntentActivities nebo ResolveActivity, abyste se ujistili, že existuje aplikace, která může požadavek zpracovat. Pokud používáte Xamarin.Essentials, pak jste se s těmito API možná nesetkali, protože knihovna za vás automaticky zpracovává veškerou logiku pro prohlížeč(externí), e-mail a SMS.

Před systémem Android 11 se mohla každá aplikace snadno dotázat všech nainstalovaných aplikací a zjistit, zda se při volání StartActivity otevře konkrétní Intent. To vše se se zavedením viditelnosti balíčků v systému Android 11 změnilo. Nyní budete muset deklarovat, jaké záměry a datová schémata chcete, aby se vaše aplikace mohla dotazovat, když vaše aplikace cílí na Android 11.

Nastavení projektu Android cílícího na Android 11

Pokud přecílíte na Android 11 a spustíte svou aplikaci na zařízení se systémem Android 11, obdržíte nulové výsledky, pokud použijete QueryIntentActivities. Pokud používáte Xamarin.Essentials, obdržíte FeatureNotSupportedException, když se pokusíte zavolat jedno z rozhraní API, které potřebuje dotaz na aktivity. Řekněme, že používáte funkci E-mail v Xamarin.Essentials. Váš kód může vypadat takto:

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 }}

Pokud by vaše aplikace byla zaměřena na systém Android 10 a starší, prostě by to fungovalo. S viditelností balíčků v Androidu 11 se při pokusu o odeslání E-mailu Xamarin.Essentials pokusí vyhledat balíčky, které podporují e-mail, a vrátí nulové výsledky. Výsledkem bude hlášení FeatureNotSupportedException, které bude vyhozeno, což není ideální. Aby vaše aplikace získala viditelnost do balíčků, budete muset do seznamu AndroidManifest.xml přidat queries.

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

Pokud potřebujete dotazovat více záměrů nebo používat více rozhraní API, budete je muset do seznamu přidat všechny.

<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>

A je to, s malým množstvím konfigurace bude vaše aplikace bezchybně fungovat i při cílení na Android 11.

Další informace

Ujistěte se, že jste si prošli oficiální dokumentaci k Androidu 11 o viditelnosti balíčků a samozřejmě nově aktualizovanou dokumentaci Xamarin.Essentials. A nakonec si nezapomeňte přečíst poznámky k vydání Xamarin.Android 11.

Avatar
James Montemagno

Principal Lead Program Manager, .NET Community

Follow

.

Napsat komentář