James
15 octombrie 2020
Android 11 a introdus mai multe actualizări interesante pe care dezvoltatorii le pot integra în experiența aplicațiilor lor, inclusiv noi controale de dispozitiv și media, suport îmbunătățit pentru foldables și multe altele. În plus față de noile caracteristici, există, de asemenea, mai multe îmbunătățiri privind confidențialitatea pe care dezvoltatorii trebuie să le integreze în aplicația lor atunci când o actualizează și o reorientează la Android 11. Una dintre aceste îmbunătățiri este introducerea vizibilității pachetelor care modifică capacitatea de a interoga aplicațiile și pachetele instalate pe dispozitivul unui utilizator.
Când doriți să deschideți un browser sau să trimiteți un e-mail, atunci aplicația dvs. va trebui să lanseze și să interacționeze cu o altă aplicație de pe dispozitiv prin intermediul unui Intent
. Înainte de a apela StartActivity
, este cea mai bună practică să QueryIntentActivities
sau ResolveActivity
pentru a vă asigura că există o aplicație care poate gestiona cererea. Dacă utilizați Xamarin.Essentials, atunci este posibil să nu fi văzut aceste API-uri, deoarece biblioteca gestionează automat toată logica în locul dumneavoastră pentru Browser(External), Email și SMS.
Înainte de Android 11, fiecare aplicație putea să interogheze cu ușurință toate aplicațiile instalate și să vadă dacă o anumită Intent
se va deschide atunci când este apelată StartActivity
. Toate acestea s-au schimbat odată cu Android 11, odată cu introducerea vizibilității pachetelor. Acum va trebui să declarați care sunt intențiile și schemele de date pe care doriți ca aplicația dvs. să le poată interoga atunci când aplicația dvs. vizează Android 11.
După ce vă reorientați către Android 11 și rulați aplicația dvs. pe un dispozitiv care rulează Android 11, veți primi rezultate zero dacă utilizați QueryIntentActivities
. Dacă utilizați Xamarin.Essentials, veți primi un FeatureNotSupportedException
atunci când încercați să apelați una dintre API-urile care trebuie să interogheze activități. Să presupunem că folosiți funcția Email din Xamarin.Essentials. Codul dvs. ar putea arăta astfel:
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 }}
Dacă aplicația dvs. viza Android 10 și mai devreme, ar funcționa pur și simplu. Cu vizibilitatea pachetelor în Android 11, atunci când încercați să trimiteți un e-mail, Xamarin.Essentials va încerca să interogheze pacakges care acceptă e-mailul și vor fi returnate rezultate zero. Acest lucru va duce la aruncarea unui FeatureNotSupportedException
, ceea ce nu este ideal. Pentru a permite aplicației dvs. să obțină vizibilitate în pachete, va trebui să adăugați o listă de queries
în AndroidManifest.xml
.
<manifest package="com.mycompany.myapp"> <queries> <intent> <action android:name="android.intent.action.SENDTO" /> <data android:scheme="mailto" /> </intent> </queries></manifest>
Dacă aveți nevoie să interogați mai multe intenții sau să utilizați mai multe API-uri, va trebui să le adăugați pe toate în listă.
<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>
Și iată că, cu doar o cantitate mică de configurare, aplicația dvs. va continua să funcționeze fără cusur atunci când vizați Android 11.
Învățați mai multe
Asigurați-vă că răsfoiți documentația oficială Android 11 privind vizibilitatea pachetelor și, bineînțeles, documentația Xamarin.Essentials recent actualizată. În cele din urmă, asigurați-vă că citiți notele de lansare Xamarin.Android 11.
James Montemagno
Principal Lead Program Manager, .NET Community
Urmăriți
.