Wenn Sie Ihre App erstellen, sollten Sie die anderen Apps auf dem Gerät berücksichtigen, mit denen Ihre App interagieren muss. Wenn Ihre App auf Unter Android 11 (API-Level 30) oder höher macht das System einige Apps für Ihr App automatisch, aber sie filtert anderen Apps. In diesem Leitfaden wird beschrieben, wie Sie diese Apps sichtbar machen. zu Ihrer App hinzufügen.
Wenn Ihre App auf Android 11 oder höher ausgerichtet ist und mit
neben den automatisch sichtbaren Apps,
<queries>
-Element im Element
Manifestdatei. Legen Sie innerhalb des <queries>
-Elements die anderen Apps fest, indem Sie
Paketname, nach Intent-Signatur,
oder durch die Behörde des Anbieters, wie im Folgenden beschrieben
.
Bestimmte Paketnamen
Wenn Sie die Apps kennen, die Sie abfragen oder mit denen Sie interagieren möchten, z. B. Apps, die in Ihre App eingebunden sind, oder Apps, deren Dienste Sie verwenden, fügen Sie die Paketnamen in eine Reihe von <package>
-Elementen innerhalb des <queries>
-Elements ein:
<manifest package="com.example.game"> <queries> <package android:name="com.example.store" /> <package android:name="com.example.services" /> </queries> ... </manifest>
Mit einer Host-App in einer Bibliothek kommunizieren
Wenn Sie eine Android-Bibliothek entwickeln, können Sie Ihre Anforderungen an die Paketsichtbarkeit deklarieren
Durch Hinzufügen eines <queries>
-Elements in deinem AAR-Manifest
Datei. Dieses <queries>
-Element hat dieselbe Funktionalität wie das Element, das Apps in ihren eigenen Manifesten deklarieren können.
Wenn Ihre Bibliothek die Kommunikation mit einer Host-App umfasst, beispielsweise die Verwendung einer gebundenen
Dienst enthalten, fügen Sie ein <package>
-Element hinzu, das
gibt den Paketnamen der Host-App an:
<!-- Place inside the <queries> element. --> <package android:name=PACKAGE_NAME />
Wenn Sie diese Deklaration einfügen, können Sie prüfen, ob die Host-App installiert ist, und mit ihr interagieren, z. B. durch Aufrufen von bindService()
.
Die Anruf-App, die Ihre Bibliothek verwendet, wird automatisch
für die Host-App sichtbar,
diese Interaktion.
Pakete, die einer Intent-Filtersignatur entsprechen
Ihre App muss möglicherweise eine Reihe von Apps abfragen oder mit ihnen interagieren, die einem bestimmten Zweck dienen, aber Sie kennen möglicherweise nicht die Paketnamen, die Sie angeben müssen. In diesem Fall können Sie Intent-Filtersignaturen in Ihrem <queries>
-Element auflisten. Ihre App kann dann Apps finden, die über passende <intent-filter>
-Elemente verfügen.
Das folgende Codebeispiel zeigt ein <intent>
-Element, mit dem die App andere installierte Apps sehen kann, die die Freigabe von JPEG-Bildern unterstützen:
<manifest package="com.example.game"> <queries> <intent> <action android:name="android.intent.action.SEND" /> <data android:mimeType="image/jpeg" /> </intent> </queries> ... </manifest>
Das <intent>
-Element hat einige Einschränkungen:
- Sie müssen genau ein
<action>
-Element angeben. - Die Attribute
path
,pathPrefix
,pathPattern
oderport
dürfen nicht in einem<data>
-Element verwendet werden. Das System verhält sich so, als würden Sie für jedes Attribut den Wert zum generischen Platzhalterzeichen (*
) hinzu. - Sie können das Attribut
mimeGroup
eines<data>
-Elements nicht verwenden. Innerhalb der
<data>
-Elemente eines einzelnen<intent>
-Elements kannst du jedes einzelne der folgenden Attribute höchstens einmal angeben:mimeType
scheme
host
Sie können diese Attribute auf mehrere
<data>
-Elemente verteilen oder in einem einzelnen<data>
-Element.
Das <intent>
-Element unterstützt das generische Platzhalterzeichen (*
) als
-Wert für einige Attribute:
- Das Attribut
name
des Elements<action>
. - Der Untertyp des
mimeType
-Attributs eines<data>
-Elements (image/*
). - Der Typ und Untertyp des
mimeType
-Attributs eines<data>
-Elements (*/*
). - Das
scheme
-Attribut eines<data>
-Elements. - Das
host
-Attribut eines<data>
-Elements.
Sofern in der vorherigen Liste nicht anders angegeben, unterstützt das System keinen
Kombination aus Text- und Platzhalterzeichen, z. B. prefix*
.
Pakete, für die eine bestimmte Zertifizierungsstelle verwendet wird
Wenn du einen Inhaltsanbieter abfragen möchtest, aber die spezifischen Paketnamen nicht kennst, kannst du die Anbieterautorität in einem <provider>
-Element angeben, wie im folgenden Snippet gezeigt:
<manifest package="com.example.suite.enterprise"> <queries> <provider android:authorities="com.example.settings.files" /> </queries> ... </manifest>
Sie können Anbieterbehörden in einem einzigen <queries>
-Element deklarieren. Im
<queries>
-Element können Sie ein oder mehrere <provider>
-Elemente angeben. A
Das <provider>
-Element kann eine einzelne Anbieterbehörde oder einen
durch Semikolons getrennte Liste von Anbieterstellen.
Alle Apps (nicht empfohlen)
In seltenen Fällen muss Ihre App möglicherweise alle auf einem Gerät installierten Apps abfragen oder mit ihnen interagieren, unabhängig von den darin enthaltenen Komponenten. Damit Ihre App alle anderen installierten Apps sehen kann, stellt das System die Berechtigung QUERY_ALL_PACKAGES
bereit.
Einige Beispiele für Anwendungsfälle,
Die Berechtigung QUERY_ALL_PACKAGES
sollte Folgendes enthalten:
- Bedienungshilfen-Apps
- Browser
- Apps zur Geräteverwaltung
- Sicherheits-Apps
- Antiviren-Apps
In der Regel ist es jedoch möglich, die Anwendungsfälle Ihrer App zu erfüllen, indem Sie mit den Apps interagieren, die automatisch sichtbar sind, und die anderen Apps, auf die Ihre App zugreifen muss, in Ihrer Manifestdatei deklarieren. Aus Datenschutzgründen sollte Ihre App nur die minimale Sichtbarkeit des Pakets anfordern, die für die Funktion Ihrer App erforderlich ist.
Diese Richtlinienaktualisierung von Google Play enthält Richtlinien für Apps, für die die Berechtigung QUERY_ALL_PACKAGES
erforderlich ist.