Alkalmazások lekérdezése és interakciója az Android 11-ben a csomagok láthatóságával

Avatar

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.

Az e-mail alkalmazások alkalmazásikonjai és az eszközön lévő szándékok lekérdezésére szolgáló kód

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.

Android projekt beállításai az Android 11-et célozva

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.

Avatar
James Montemagno

Principal Lead Program Manager, .NET Community

Kövesse

Szólj hozzá!