Zapytanie i interakcja z aplikacjami w Androidzie 11 z widocznością pakietów

Avatar

James

15 października 2020

Android 11 wprowadził kilka ekscytujących aktualizacji dla deweloperów, aby zintegrować się z ich doświadczeniami aplikacji, w tym nowe urządzenia i kontrole mediów, ulepszone wsparcie dla foldables, i wiele więcej. Oprócz nowych funkcji istnieje również kilka ulepszeń prywatności, że deweloperzy muszą zintegrować się z ich aplikacji podczas aktualizacji i ponownego kierowania do Androida 11. Jednym z tych ulepszeń jest wprowadzenie widoczności pakietów, która zmienia zdolność do odpytywania zainstalowanych aplikacji i pakietów na urządzeniu użytkownika.

Ikony aplikacji dla aplikacji e-mail i kod do odpytywania intencji na urządzeniu

Gdy chcesz otworzyć przeglądarkę lub wysłać e-mail, wtedy Twoja aplikacja będzie musiała uruchomić i współdziałać z inną aplikacją na urządzeniu poprzez Intent. Przed wywołaniem StartActivity najlepszą praktyką jest QueryIntentActivities lub ResolveActivity, aby upewnić się, że istnieje aplikacja, która może obsłużyć żądanie. Jeśli używasz Xamarin.Essentials, to możesz nie widzieć tych API, ponieważ biblioteka obsługuje całą logikę dla ciebie automatycznie dla Browser(External), Email, i SMS.

Przed Android 11 każda aplikacja mogła łatwo zapytać wszystkie zainstalowane aplikacje i zobaczyć, czy konkretny Intent otworzy się, gdy StartActivity jest wywoływany. To wszystko zmieniło się z Androidem 11 wraz z wprowadzeniem widoczności pakietów. Teraz będziesz musiał zadeklarować, jakie intencje i schematy danych chcesz, aby twoja aplikacja była w stanie zapytać, gdy twoja aplikacja jest ukierunkowana na Androida 11.

Ustawienia projektu Androida ukierunkowane na Androida 11

Po retargetowaniu do Androida 11 i uruchomieniu aplikacji na urządzeniu z systemem Android 11 otrzymasz zero wyników, jeśli użyjesz QueryIntentActivities. Jeśli używasz Xamarin.Essentials, otrzymasz FeatureNotSupportedException, gdy spróbujesz wywołać jeden z interfejsów API, który wymaga zapytania o działania. Załóżmy, że używasz funkcji Email w Xamarin.Essentials. Twój kod może wyglądać tak:

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 }}

Jeśli twoja aplikacja celowała w Androida 10 i wcześniej, to po prostu by działało. Z widocznością pakietów w Androidzie 11, gdy spróbujesz wysłać wiadomość e-mail, Xamarin.Essentials spróbuje zapytać o pakiety, które obsługują pocztę e-mail i zero wyników zostanie zwróconych. Spowoduje to, że FeatureNotSupportedException zostanie rzucony, co nie jest idealne. Aby umożliwić Twojej aplikacji uzyskanie widoczności w pakietach, będziesz musiał dodać listę queries do swojego AndroidManifest.xml.

<manifest package="com.mycompany.myapp"> <queries> <intent> <action android:name="android.intent.action.SENDTO" /> <data android:scheme="mailto" /> </intent> </queries></manifest>

Jeśli potrzebujesz kwerendy wielu intencji lub używasz wielu interfejsów API, będziesz musiał dodać je wszystkie do listy.

<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 oto masz, z niewielką ilością konfiguracji twoja aplikacja będzie nadal działać bezbłędnie, gdy celujesz w Androida 11.

Learn More

Pewnie przejrzyj oficjalną dokumentację Androida 11 na temat widoczności pakietów, i oczywiście nowo zaktualizowaną dokumentację Xamarin.Essentials. Na koniec, koniecznie zapoznaj się z uwagami do wydania Xamarin.Android 11.

Avatar
James Montemagno

Principal Lead Program Manager, .NET Community

Follow

.

Dodaj komentarz