Android
FileProvider
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.
Maak een nieuw XML-bestand dat de paden bevat, bijvoorbeeld res / xml / filepaths.xml
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.