James
Október 15., 2020
Az Android 11 számos izgalmas frissítést vezetett be a fejlesztők számára, amelyeket beépíthetnek az alkalmazásukba, beleértve az új eszköz- és média vezérlőket, a foldable-ek fokozott támogatását és még sok mást. Az új funkciók mellett számos adatvédelmi javítás is van, amelyeket a fejlesztőknek az Android 11-re történő frissítés és újracélzás során integrálniuk kell az alkalmazásukba. Az egyik ilyen fejlesztés a csomagok láthatóságának bevezetése, amely megváltoztatja a felhasználó készülékén telepített alkalmazások és csomagok lekérdezésének lehetőségét.
Amikor egy böngészőt szeretne megnyitni vagy e-mailt küldeni, akkor az alkalmazásnak egy Intent
segítségével el kell indítania és kölcsönhatásba kell lépnie az eszközön lévő másik alkalmazással. A StartActivity
hívása előtt a legjobb gyakorlat az QueryIntentActivities
vagy ResolveActivity
, hogy megbizonyosodjon arról, hogy van olyan alkalmazás, amely képes kezelni a kérést. Ha a Xamarin.Essentials-t használja, akkor nem biztos, hogy látta ezeket az API-kat, mert a könyvtár automatikusan kezeli az összes logikát a böngésző(külső), az e-mail és az SMS esetében.
Az Android 11 előtt minden alkalmazás könnyen lekérdezhette az összes telepített alkalmazást, és láthatta, hogy egy adott Intent
megnyílik-e a StartActivity
hívásakor. Ez mind megváltozott az Android 11-gyel a csomagok láthatóságának bevezetésével. Mostantól deklarálnia kell, hogy milyen intenteket és adatsémákat szeretne lekérdezni az alkalmazás, ha az alkalmazás az Android 11-et célozza meg.
Amikor újra az Android 11-et célozza meg, és futtatja az alkalmazást egy Android 11-et futtató eszközön, nulla eredményt kap, ha a QueryIntentActivities
-t használja. Ha Xamarin.Essentials-t használ, akkor FeatureNotSupportedException
-t fog kapni, amikor megpróbálja meghívni az egyik API-t, amelynek le kell kérdeznie a tevékenységeket. Tegyük fel, hogy a Xamarin.Essentials Email funkcióját használja. A kódod így nézhet ki:
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 }}
Ha az alkalmazásod az Android 10 és korábbi rendszereket célozza, akkor ez egyszerűen működne. A csomagok láthatóságával az Android 11-ben, amikor megpróbál e-mailt küldeni, a Xamarin.Essentials megpróbálja lekérdezni az e-mailt támogató csomagokat, és nulla eredményt kap vissza. Ez egy FeatureNotSupportedException
dobást eredményez, ami nem ideális. Ahhoz, hogy az alkalmazása láthatóvá váljon a csomagokban, hozzá kell adnia egy queries
listát a AndroidManifest.xml
-hez.
<manifest package="com.mycompany.myapp"> <queries> <intent> <action android:name="android.intent.action.SENDTO" /> <data android:scheme="mailto" /> </intent> </queries></manifest>
Ha több intent lekérdezésére van szüksége, vagy több API-t használ, akkor mindet hozzá kell adnia a listához.
<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>
És ezzel meg is van, egy kis konfigurációval az alkalmazásod továbbra is hibátlanul fog működni, amikor az Android 11-et célba veszed.
Megtanulhatsz többet
Nézd át a hivatalos Android 11 dokumentációt a csomagok láthatóságáról, és természetesen a frissen frissített Xamarin.Essentials dokumentációt. Végül mindenképpen olvassa át a Xamarin.Android 11 kiadási jegyzeteit.
James Montemagno
Principal Lead Program Manager, .NET Community
Kövesse