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 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 ani port 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.