Podczas tworzenia aplikacji należy zastanowić się nad innymi aplikacjami na urządzeniu, z którymi aplikacja musi wchodzić w interakcje. Jeśli Twoja aplikacja jest kierowana na Androida 11 (poziom interfejsu API 30) lub nowszego, system automatycznie zobaczy dla niej niektóre aplikacje, ale inne domyślnie odfiltrowuje. Z tego przewodnika dowiesz się, jak ustawić te aplikacje dla aplikacji jako widoczne.
Jeśli Twoja aplikacja jest kierowana na Androida 11 lub nowszego i musi wchodzić w interakcje z aplikacjami innymi niż te, które są widoczne automatycznie, dodaj element <queries>
w pliku manifestu aplikacji. W elemencie <queries>
wskaż inne aplikacje według nazwy pakietu, podpisu intencji lub według urzędu dostawcy zgodnie z opisem w sekcjach poniżej.
Konkretne nazwy pakietów
Jeśli wiesz, których aplikacji chcesz używać do wysyłania zapytań lub interakcji z nimi (np. takich, które integrują się z Twoją aplikacją lub z których usług korzystasz), umieść nazwy tych aplikacji w zestawie 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>
Komunikuj się z aplikacją hostującą w bibliotece
Jeśli tworzysz bibliotekę na Androida, możesz zadeklarować potrzeby w zakresie widoczności pakietów, dodając element <queries>
w pliku manifestu AAR. Ten element <queries>
ma takie same funkcje jak element, który aplikacje mogą zadeklarować w swoich plikach manifestu.
Jeśli Twoja biblioteka wymaga komunikacji z aplikacją hosta, na przykład korzystania z powiązanej usługi, dodaj element <package>
, który określa nazwę pakietu aplikacji hosta:
<!-- Place inside the <queries> element. --> <package android:name=PACKAGE_NAME />
Po dołączeniu tej deklaracji możesz sprawdzić, czy aplikacja hostująca jest zainstalowana i wchodzić z nią w interakcje, na przykład wywołując metodę bindService()
.
W wyniku tej interakcji aplikacja do wykonywania połączeń, która używa Twojej biblioteki, automatycznie staje się widoczna dla aplikacji hostującej.
Pakiety pasujące do podpisu filtra intencji
Aplikacja może wymagać zapytania lub interakcji z zestawem aplikacji, które służą do konkretnego celu, ale nie znasz konkretnych nazw pakietów, które należy uwzględnić. W takiej sytuacji w elemencie <queries>
możesz wyświetlić podpisy filtrów intencji. Dzięki temu aplikacja może wykrywać aplikacje, które pasują do elementów <intent-filter>
.
Poniższy przykładowy kod pokazuje element <intent>
, który umożliwi aplikacji sprawdzenie innych zainstalowanych aplikacji obsługujących udostępnianie obrazów w formacie 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żesz używać atrybutówpath
,pathPrefix
,pathPattern
aniport
. System działa tak, jakby wartość każdego atrybutu została ustawiona na ogólny symbol wieloznaczny (*
). - Nie możesz używać atrybutu
mimeGroup
elementu<data>
. W elementach
<data>
pojedynczego elementu<intent>
możesz użyć jednocześnie każdego z tych atrybutów:mimeType
scheme
host
Możesz rozłożyć te atrybuty na wiele elementów
<data>
lub użyć ich w pojedynczym elemencie<data>
.
Element <intent>
obsługuje jako wartość kilku atrybutów ogólny symbol wieloznaczny (*
):
- 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 tekstu i znaków wieloznacznych, takich jak prefix*
.
Pakiety korzystające z określonych urzędów
Jeśli chcesz wysłać zapytanie do dostawcy treści, ale nie znasz konkretnych nazw pakietów, możesz zadeklarować urząd dostawcy w elemencie <provider>
, jak 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 elemencie <queries>
możesz zadeklarować co najmniej 1 element <provider>
. Element <provider>
może zawierać pojedynczy organ dostawcy lub listę urzędów dostawcy rozdzielaną średnikami.
Wszystkie aplikacje (niezalecane)
W rzadkich przypadkach aplikacja może wymagać wysyłania zapytań dotyczących wszystkich aplikacji zainstalowanych na urządzeniu lub interakcji z nimi niezależnie od zawartych w nich komponentów. Aby umożliwić aplikacji wyświetlanie wszystkich innych zainstalowanych aplikacji, system udostępnia uprawnienie QUERY_ALL_PACKAGES
.
Oto kilka przykładów przypadków użycia, w których warto uwzględnić uprawnienie QUERY_ALL_PACKAGES
:
- Aplikacje ułatwień dostępu
- Przeglądarki
- Aplikacje do zarządzania urządzeniami
- Aplikacje zabezpieczające
- Aplikacje antywirusowe
Jednak wykorzystanie aplikacji jest zwykle możliwe przez interakcję z zestawem aplikacji, które są widoczne automatycznie , i zadeklarowanie w pliku manifestu innych aplikacji, których potrzebuje aplikacja. Ze względu na prywatność użytkownika aplikacja powinna prosić o najmniejszą widoczność pakietu, która jest niezbędna do działania.
W tej aktualizacji zasad Google Play znajdziesz wskazówki dotyczące aplikacji, które wymagają uprawnienia QUERY_ALL_PACKAGES
.