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.

  1. Erstellen Sie eine neue XML-Datei, die die Pfade enthält, z. B. res / xml / filepaths.xml

  2. 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.



Modified text is an extract of the original Stack Overflow Documentation
Lizenziert unter CC BY-SA 3.0
Nicht angeschlossen an Stack Overflow