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: