Teilen von Dateien einrichten

Wenn du eine Datei von deiner App sicher einer anderen App anbieten möchtest, musst du deine App so konfigurieren, dass ein sicheres Handle zur Datei in Form eines Inhalts-URI. Das Android- Die Komponente „FileProvider“ generiert Inhalts-URIs für basierend auf den Spezifikationen, die Sie in XML bereitstellen. In dieser Lektion erfahren Sie, wie Sie Implementierung von FileProvider in deiner App die Dateien angeben, die Sie anderen Apps anbieten möchten.

Hinweis: Die Klasse FileProvider ist Teil des AndroidX Core Library Weitere Informationen Informationen zum Hinzufügen dieser Bibliothek in Ihre Anwendung erhalten Sie unter Abhängigkeiten angeben:

FileProvider angeben

Zum Definieren einer FileProvider für deine App ist ein Eintrag in in deinem Manifest. Dieser Eintrag gibt die Berechtigung an, die beim Generieren von Inhalts-URIs verwendet werden soll, sowie Der Name einer XML-Datei, in der die Verzeichnisse angegeben sind, die Ihre App freigeben kann.

Das folgende Snippet zeigt Ihnen, wie Sie <provider>-Element, das die FileProvider, die Authority und die Name der XML-Datei:

<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="com.example.myapp">
    <application
        ...>
        <provider
            android:name="androidx.core.content.FileProvider"
            android:authorities="com.example.myapp.fileprovider"
            android:grantUriPermissions="true"
            android:exported="false">
            <meta-data
                android:name="android.support.FILE_PROVIDER_PATHS"
                android:resource="@xml/filepaths" />
        </provider>
        ...
    </application>
</manifest>

In diesem Beispiel gibt das Attribut android:authorities die URI-Befugnis an. die Sie für Inhalts-URIs verwenden möchten, die vom FileProvider. In diesem Beispiel lautet die Zertifizierungsstelle com.example.myapp.fileprovider. Für mich selbst App, geben Sie eine Behörde an, die aus dem android:package-Wert mit dem String „fileprovider“ angehängt wird. Weitere Informationen „Authority-Wert“ erfahren Sie im Inhalts-URIs und die Dokumentation für die android:authorities.

Das untergeordnete Element <meta-data> des Elements <provider> verweist auf eine XML-Datei, in der die Verzeichnisse angegeben sind, die Sie löschen möchten. Teilen. Das Attribut android:resource ist der Pfad und Name der Datei ohne Die Erweiterung .xml.Der Inhalt dieser Datei wird im nächsten Abschnitt beschrieben.

Freigebbare Verzeichnisse angeben

Nachdem du das FileProvider zu deinem App-Manifest hinzugefügt hast, müssen Sie die Verzeichnisse angeben, die die freizugebenden Dateien enthalten. Um den Parameter erstellen Sie zuerst die Datei filepaths.xml im Ordner res/xml/ Unterverzeichnis Ihres Projekts. Geben Sie in dieser Datei die Verzeichnisse an, indem Sie ein XML-Element für für jedes Verzeichnis. Das folgende Snippet zeigt Ihnen ein Beispiel für den Inhalt eines res/xml/filepaths.xml Das Snippet zeigt auch, wie ein Unterverzeichnis freigegeben wird. des Verzeichnisses files/ in Ihrem internen Speicherbereich:

<paths>
    <files-path path="images/" name="myimages" />
</paths>

In diesem Beispiel gibt das Tag <files-path> Verzeichnisse innerhalb der files/ des internen Speichers der App. Das Attribut path gibt das Unterverzeichnis images/ von files/ frei. Das name weist das FileProvider an, das Pfadsegment hinzuzufügen myimages zu Inhalts-URIs für Dateien im Unterverzeichnis files/images/.

Das <paths>-Element kann mehrere untergeordnete Elemente haben, die jeweils ein anderes Element definieren Verzeichnis zum Teilen. Zusätzlich zum <files-path>-Element können Sie das Element <external-path> verwenden, um Verzeichnisse im externen Speicher freizugeben und Das Element <cache-path> zur Freigabe von Verzeichnissen in deinem internen Cache -Verzeichnis. Weitere Informationen zu den untergeordneten Elementen, die freigegebene Verzeichnisse angeben, finden Sie in der Referenzdokumentation zu FileProvider

Hinweis:Die XML-Datei ist die einzige Möglichkeit, die Verzeichnisse anzugeben, die teilen; können Sie ein Verzeichnis nicht programmatisch hinzufügen.

Sie haben jetzt die vollständige Spezifikation eines FileProvider. generiert Inhalts-URIs für Dateien im Verzeichnis files/ der internen Speicher oder für Dateien in Unterverzeichnissen von files/. Wann generiert Ihre App Inhalts-URI für eine Datei ist, enthält sie die in den <provider>-Element (com.example.myapp.fileprovider), den Pfad myimages/ und den Namen der Datei.

Wenn Sie beispielsweise ein FileProvider gemäß der und Sie fordern einen Inhalts-URI für die Datei an, default_image.jpg gibt FileProvider den Fehlerwert folgenden URI:

content://com.example.myapp.fileprovider/myimages/default_image.jpg

Weitere Informationen finden Sie hier: