Zoeken…


Een bestand delen

In dit voorbeeld leert u hoe u een bestand deelt met andere apps. We zullen in dit voorbeeld een pdf-bestand gebruiken, hoewel de code ook met elk ander formaat werkt.

De routekaart:

Geef de mappen op waarin de bestanden worden geplaatst die u wilt delen

Om bestanden te delen gebruiken we een FileProvider, een klasse die veilige bestandsuitwisseling tussen apps mogelijk maakt. Een FileProvider kan alleen bestanden delen in vooraf gedefinieerde mappen, dus laten we deze definiëren.

  1. Maak een nieuw XML-bestand dat de paden bevat, bijvoorbeeld res / xml / filepaths.xml

  2. Voeg de paden toe

    <paths xmlns:android="http://schemas.android.com/apk/res/android">
        <files-path name="pdf_folder" path="documents/"/>
    </paths>
    

Definieer een FileProvider en koppel deze aan de bestandspaden

Dit gebeurt in het 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>

Genereer de URI voor het bestand

Om het bestand te delen, moeten we een ID voor het bestand opgeven. Dit wordt gedaan met behulp van een 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);

Zoals u in de code kunt zien, maken we eerst een nieuwe bestandsklasse die het bestand vertegenwoordigt. Om een URI te krijgen vragen we FileProvider om er een voor ons te krijgen. Het tweede argument is belangrijk: het geeft de autoriteit van een FileProvider door. Het moet gelijk zijn aan de autoriteit van de FileProvider die in het manifest is gedefinieerd.

Deel het bestand met andere apps

We gebruiken ShareCompat om het bestand te delen met andere apps:
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);

Een kiezer is een menu waaruit de gebruiker kan kiezen met welke app hij / zij het bestand wil delen. De vlag Intent.FLAG_GRANT_READ_URI_PERMISSION is nodig om tijdelijke leestoegangstoestemming te verlenen aan de URI.



Modified text is an extract of the original Stack Overflow Documentation
Licentie onder CC BY-SA 3.0
Niet aangesloten bij Stack Overflow