Zadeklaruj potrzeby związane z widocznością pakietu

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ów path, pathPrefix, pathPattern ani port. 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.