Android
FileProvider
Suche…
Freigeben einer Datei
In diesem Beispiel erfahren Sie, wie Sie eine Datei für andere Apps freigeben. Wir verwenden in diesem Beispiel eine PDF-Datei, obwohl der Code auch mit jedem anderen Format funktioniert.
Die Roadmap:
Geben Sie die Verzeichnisse an, in denen sich die Dateien befinden, die Sie freigeben möchten
Um Dateien gemeinsam zu nutzen, verwenden wir einen FileProvider, eine Klasse, die eine sichere Dateifreigabe zwischen Apps ermöglicht. Ein FileProvider kann Dateien nur in vordefinierten Verzeichnissen freigeben. Definieren Sie diese also.
Erstellen Sie eine neue XML-Datei, die die Pfade enthält, z. B. res / xml / filepaths.xml
Fügen Sie die Pfade hinzu
<paths xmlns:android="http://schemas.android.com/apk/res/android"> <files-path name="pdf_folder" path="documents/"/> </paths>
Definieren Sie einen FileProvider und verknüpfen Sie ihn mit den Dateipfaden
Dies geschieht im Manifest:<manifest>
...
<application>
...
<provider
android:name="android.support.v4.context.FileProvider"
android:authorities="com.mydomain.fileprovider"
android:exported="false"
android:grantUriPermissions="true">
<meta-data
android:name="android.support.FILE_PROVIDER_PATHS"
android:resource="@xml/filepaths" />
</provider>
...
</application>
...
</manifest>
Generieren Sie den URI für die Datei
Um die Datei gemeinsam zu nutzen, müssen wir einen Bezeichner für die Datei angeben. Dies geschieht mithilfe einer URI (Uniform Resource Identifier).// We assume the file we want to load is in the documents/ subdirectory
// of the internal storage
File documentsPath = new File(Context.getFilesDir(), "documents");
File file = new File(documentsPath, "sample.pdf");
// This can also in one line of course:
// File file = new File(Context.getFilesDir(), "documents/sample.pdf");
Uri uri = FileProvider.getUriForFile(getContext(), "com.mydomain.fileprovider", file);
Wie Sie im Code sehen können, erstellen wir zunächst eine neue Dateiklasse, die die Datei darstellt. Um eine URI zu erhalten, bitten wir FileProvider, uns eine zu besorgen. Das zweite Argument ist wichtig: Es übergibt die Berechtigung eines FileProviders. Sie muss der Berechtigung des im Manifest definierten FileProviders entsprechen.
Teilen Sie die Datei mit anderen Apps
Wir verwenden ShareCompat, um die Datei mit anderen Apps zu teilen:Intent intent = ShareCompat.IntentBuilder.from(getContext())
.setType("application/pdf")
.setStream(uri)
.setChooserTitle("Choose bar")
.createChooserIntent()
.addFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION);
Context.startActivity(intent);
Ein Wähler ist ein Menü, aus dem der Benutzer auswählen kann, mit welcher App er die Datei freigeben möchte. Das Flag Intent.FLAG_GRANT_READ_URI_PERMISSION wird benötigt, um dem URI temporären Lesezugriff zu gewähren.