Anforderungen an die Paketsichtbarkeit deklarieren

Beim Erstellen deiner App ist es wichtig, auch die anderen Apps auf dem Gerät zu 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 sich in Ihre App einbinden lassen, oder Apps, deren Dienste Sie nutzen, Paketnamen in einem Satz von <package> Elemente innerhalb des <queries>-Elements:

<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 dasselbe als 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 />

Durch das Einfügen dieser Erklärung können Sie prüfen, ob die Host-App installiert ist und mit ihm interagieren, z. B. indem er bindService() Die Anruf-App, die Ihre Bibliothek verwendet, wird automatisch für die Host-App sichtbar, diese Interaktion.

Pakete, die mit einer Intent-Filtersignatur übereinstimmen

Möglicherweise muss Ihre App eine Reihe von Apps abfragen oder mit ihnen interagieren, für bestimmte Zwecke. Möglicherweise kennen Sie die spezifischen Paketnamen nicht, enthalten. In diesem Fall können Sie intent filter signatures in Ihrem <queries>-Element. Ihre App kann dann Apps finden, Übereinstimmung <intent-filter> Elemente.

Das folgende Codebeispiel zeigt ein <intent>-Element, mit dem die App So finden Sie weitere installierte Apps, 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>

Für das Element <intent> gelten einige Einschränkungen:

  • Du musst genau ein <action>-Element angeben.
  • Sie können die Attribute path, pathPrefix, pathPattern und port nicht verwenden in einem <data>-Element. 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 Attributs mimeType eines <data>-Elements (image/*).
  • Der Typ und Untertyp des Attributs mimeType eines <data>-Elements (*/*)
  • Das Attribut scheme eines <data>-Elements.
  • Das Attribut host 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, die eine bestimmte Behörde verwenden

Für die Abfrage eines Contents Anbieter, aber die spezifischen Paketnamen nicht kennen, können Sie die Anbieterbefugnis in einem <provider>-Element, wie in im folgenden Snippet einfügen:

<manifest package="com.example.suite.enterprise">
    <queries>
        <provider android:authorities="com.example.settings.files" />
    </queries>
    ...
</manifest>

Sie können Anbieterstellen 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 deine App möglicherweise alle installierten Apps abfragen oder mit ihnen interagieren auf einem Gerät, unabhängig von den darin enthaltenen Komponenten. So erlaubst du deiner App Folgendes: alle anderen installierten Apps sehen, stellt das System QUERY_ALL_PACKAGES Berechtigung.

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

Normalerweise ist es jedoch möglich, durch Interaktion mit einer Reihe von Apps, die automatisch sichtbar sind. und durch das Deklarieren der anderen Apps auf die deine App zugreifen muss. Bis Nutzerdaten zu schützen, sollte Ihre App die kleinste Paketmenge anfordern, die für das Funktionieren Ihrer App erforderlich ist.

Diese Richtlinienaktualisierung von Google Spielen finden Sie Richtlinien für Apps, die die Berechtigung QUERY_ALL_PACKAGES benötigen.