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