Podczas tworzenia aplikacji należy wziąć pod uwagę inne aplikacje na urządzeniu z którymi aplikacja musi wejść w interakcję. 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>
wskaż inne aplikacje według
nazwa pakietu, wg podpisu intencji,
lub przez organ dostawcy, jak opisano poniżej
sekcji.
Konkretne nazwy pakietów
Jeśli znasz konkretne aplikacje, których chcesz używać do wysyłania zapytań lub interakcji z nimi, na przykład
aplikacje integrujące się z Twoją aplikacją oraz aplikacje, z których korzystasz, obejmują
nazwy pakietów w zbiorze <package>
elementy wewnątrz elementu <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 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 pasujące 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 określić
podpisy filtrowania intencji w
<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>
. - Nie możesz używać atrybutów
path
,pathPrefix
,pathPattern
aniport
w elemencie<data>
. System działa tak, jakby wartość każdego atrybutu została przez Ciebie ustawiona na ogólny symbol wieloznaczny (*
). - Nie możesz używać atrybutu
mimeGroup
elementu<data>
. W obrębie elementów
<data>
pojedynczego elementu<intent>
możesz użyć każdego z następujących atrybutów naraz:mimeType
scheme
host
Możesz rozłożyć te atrybuty na wiele elementów
<data>
lub użyć je w jednym elemencie<data>
.
Element <intent>
obsługuje ogólny symbol wieloznaczny (*
) jako
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 wysyłać zapytania do wszystkich zainstalowanych aplikacji lub wchodzić z nimi w interakcję
niezależnie od zawartych w nich 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
Google Play
zawiera wytyczne dotyczące aplikacji, które wymagają uprawnienia QUERY_ALL_PACKAGES
.