Podczas tworzenia aplikacji należy wziąć pod uwagę inne aplikacje na urządzeniu, z którymi aplikacja musi się komunikować. Jeśli Twoja aplikacja jest kierowana Androida 11 (poziom interfejsu API 30) lub nowszego system sprawia, że niektóre aplikacje są widoczne dla automatycznie, ale odfiltrowuje innych aplikacji. Z tego przewodnika dowiesz się, jak ustawić widoczność tych aplikacji do Twojej aplikacji.
Jeśli aplikacja jest kierowana na Androida 11 lub nowszego i wymaga interakcji
z innymi aplikacjami niż te, które są widoczne automatycznie, dodaj parametr
<queries>
w tagu aplikacji
manifestu. W elemencie <queries>
określ inne aplikacje na podstawie nazwy pakietu, na podstawie sygnatury zamiaru lub na podstawie autoryzacji dostawcy, zgodnie z opisem w następnych sekcjach.
Nazwy konkretnych pakietów
Jeśli znasz aplikacje, do których chcesz wysłać zapytanie lub z którymi chcesz wchodzić w interakcję (np. aplikacje, które się integrują z Twoją aplikacją lub których usług używasz), podaj ich nazwy pakietów w zbiorze elementów <package>
w elemencie <queries>
:
<manifest package="com.example.game"> <queries> <package android:name="com.example.store" /> <package android:name="com.example.services" /> </queries> ... </manifest>
Komunikacja z aplikacją hostującą w bibliotece
Jeśli tworzysz bibliotekę na Androida, możesz zadeklarować wymagania dotyczące widoczności pakietu, dodając element <queries>
do pliku manifestu AAR. Ten element <queries>
ma taki sam
jako element, który aplikacje mogą zadeklarować w swoich plikach manifestu.
Jeśli biblioteka wymaga komunikacji z aplikacją hostującą, na przykład korzystania z powiązanego
service, umieść element <package>
, który
określa nazwę pakietu aplikacji hosta:
<!-- Place inside the <queries> element. --> <package android:name=PACKAGE_NAME />
Jeśli dołączysz tę deklarację, możesz sprawdzić, czy aplikacja hostująca jest zainstalowana
wchodzić z nią w interakcję, np. dzwoniąc
bindService()
Aplikacja do połączeń, która korzysta z biblioteki, automatycznie stanie się
widoczne dla aplikacji hostującej w wyniku
tę interakcję.
pakiety, które pasują do podpisu filtra intencji;
Aplikacja może wymagać wysyłania zapytań lub interakcji z zestawem aplikacji, które wyświetlają
określonego celu, ale możesz nie znać konkretnych nazw pakietów,
uwzględniania. W takim przypadku możesz podać signatury filtra intencji w elemencie <queries>
. Aplikacja może wtedy wykrywać aplikacje, które zawierają
dopasowywanie
<intent-filter>
.
.
Poniższy przykładowy kod pokazuje element <intent>
, który zezwala na dostęp do aplikacji
aby zobaczyć inne zainstalowane aplikacje, które obsługują udostępnianie obrazów JPEG:
<manifest package="com.example.game"> <queries> <intent> <action android:name="android.intent.action.SEND" /> <data android:mimeType="image/jpeg" /> </intent> </queries> ... </manifest>
Element <intent>
ma kilka ograniczeń:
- Musisz uwzględnić dokładnie 1 element
<action>
. - W elemencie
<data>
nie można używać atrybutówpath
,pathPrefix
,pathPattern
aniport
. System zachowuje się tak, jakby wartość każdego atrybutu została ustawiona na ogólny znak wieloznaczny (*
). - Nie możesz używać atrybutu
mimeGroup
elementu<data>
. W obrębie elementów
<data>
pojedynczego elementu<intent>
możesz używać każdego z następujących atrybutów naraz:mimeType
scheme
host
Możesz rozmieścić te atrybuty w wielu elementach
<data>
lub użyć ich w jednym elemencie<data>
.
Element <intent>
obsługuje ogólny symbol wieloznaczny (*
) jako wartość dla kilku atrybutów:
- Atrybut
name
elementu<action>
. - Podtyp atrybutu
mimeType
elementu<data>
(image/*
). - Typ i podtyp atrybutu
mimeType
elementu<data>
(*/*
). - Atrybut
scheme
elementu<data>
. - Atrybut
host
elementu<data>
.
O ile na poprzedniej liście nie określono inaczej, system nie obsługuje
kombinacji znaków tekstowych i symboli wieloznacznych, takich jak prefix*
.
Pakiety korzystające z określonych urzędów
Jeśli chcesz wysłać zapytanie dotyczące treści
dostawcy, ale
nie znasz konkretnych nazw pakietów, możesz zadeklarować urząd dostawcy
w elemencie <provider>
, jak pokazano na ilustracji
w tym fragmencie:
<manifest package="com.example.suite.enterprise"> <queries> <provider android:authorities="com.example.settings.files" /> </queries> ... </manifest>
Możesz zadeklarować urzędy dostawcy w pojedynczym elemencie <queries>
. W ciągu
<queries>
, możesz zadeklarować co najmniej 1 element <provider>
. O
Element <provider>
może zawierać pojedynczy urząd dostawcy lub
rozdzielana średnikami lista urzędów certyfikacji.
Wszystkie aplikacje (niezalecane)
W rzadkich przypadkach aplikacja może potrzebować informacji z wszystkich zainstalowanych aplikacji na urządzeniu lub wchodzić z nimi w interakcję niezależnie od ich komponentów. Aby aplikacja mogła:
wszystkie inne zainstalowane aplikacje, system udostępnia
QUERY_ALL_PACKAGES
uprawnienia.
Oto kilka przykładów zastosowań, w których
Uprawnienie QUERY_ALL_PACKAGES
może zawierać:
- Aplikacje ułatwień dostępu
- Przeglądarki
- Aplikacje do zarządzania urządzeniami
- Aplikacje zabezpieczające
- Aplikacje antywirusowe
Zwykle jednak jest możliwe wykorzystanie aplikacji przez interakcję z aplikacjami, które są widoczne automatycznie i zadeklaruj pozostałe aplikacje do których aplikacja musi mieć dostęp w pliku manifestu. Do szanuje prywatność użytkownika, aplikacja powinna żądać jak najmniejszej ilości przesyłki niezbędną do działania aplikacji.
Ta aktualizacja zasad Google Play zawiera wskazówki dotyczące aplikacji, które wymagają uprawnienia QUERY_ALL_PACKAGES
.