James
15. lokakuuta 2020
Android 11:ssä esiteltiin useita jännittäviä päivityksiä kehittäjille, jotka he voivat integroida sovelluskokemukseensa, mukaan lukien uudet laite- ja mediakontrollit ja laajennettu tuki taittuville sovelluksille, ja paljon muuta. Uusien ominaisuuksien lisäksi on myös useita yksityisyyden suojaa koskevia parannuksia, jotka kehittäjien on integroitava sovelluksiinsa, kun he päivittävät ja kohdentavat ne uudelleen Android 11:een. Yksi näistä parannuksista on pakettinäkyvyyden käyttöönotto, joka muuttaa käyttäjän laitteeseen asennettujen sovellusten ja pakettien kyselymahdollisuutta.
Kun haluat avata selaimen tai lähettää sähköpostin, niin sovelluksesi on käynnistettävä ja oltava vuorovaikutuksessa laitteessa olevan toisen sovelluksen kanssa Intent
:n kautta. Ennen StartActivity
:n kutsumista kannattaa QueryIntentActivities
tai ResolveActivity
:n avulla varmistaa, että on olemassa sovellus, joka voi käsitellä pyynnön. Jos käytät Xamarin.Essentialsia, et ehkä ole nähnyt näitä API:ita, koska kirjasto hoitaa kaiken logiikan puolestasi automaattisesti selaimen (ulkoisen), sähköpostin ja tekstiviestin osalta.
Ennen Android 11:tä jokainen sovellus saattoi helposti kysyä kaikkia asennettuja sovelluksia ja nähdä, avautuuko tietty Intent
, kun StartActivity
kutsutaan. Tämä kaikki on muuttunut Android 11:n myötä, kun pakettien näkyvyys otettiin käyttöön. Sinun on nyt ilmoitettava, mitä intenttejä ja dataskeemoja haluat sovelluksesi voivan kysyä, kun sovelluksesi kohdistuu Android 11:een.
Kun uudelleenkohdistat Android 11:een ja suoritat sovelluksesi laitteessa, jossa on Android 11, saat nolla tulosta, jos käytät QueryIntentActivities
. Jos käytät Xamarin.Essentialsia, saat FeatureNotSupportedException
, kun yrität kutsua jotakin API:ta, jonka on kysyttävä toimintoja. Oletetaan, että käytät Xamarin.Essentialsin sähköpostiominaisuutta. Koodisi voi näyttää tältä:
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 }}
Jos sovelluksesi kohdistuisi Android 10:een ja aikaisempiin, se toimisi juuri ja juuri. Pakettinäkyvyydellä Android 11:ssä, kun yrität lähettää sähköpostia, Xamarin.Essentials yrittää kysyä sähköpostia tukevia paketteja ja nolla tulosta palautuu. Tämä johtaa FeatureNotSupportedException
:n heittämiseen, mikä ei ole ihanteellista. Jotta sovelluksesi saisi näkyvyyttä paketteihin, sinun on lisättävä queries
-luettelo AndroidManifest.xml
:ään.
<manifest package="com.mycompany.myapp"> <queries> <intent> <action android:name="android.intent.action.SENDTO" /> <data android:scheme="mailto" /> </intent> </queries></manifest>
Jos sinun on kysyttävä useita intenttejä tai käytettävä useita API:ita, sinun on lisättävä ne kaikki luetteloon.
<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>
Ja siinä se on, pienellä määrittelyllä sovelluksesi toimii jatkossakin moitteettomasti, kun kohdistat sen Android 11:een.
Learn More
Ole hyvä ja selaa Android 11:n virallista dokumentaatiota pakettinäkyvyydestä sekä tietysti vastikään päivitettyä Xamarin.Essentials -dokumentaatiota. Muista lopuksi lukea läpi Xamarin.Android 11:n julkaisutiedot.
James Montemagno
Principal Lead Program Manager, .NET Community
Seuraa