Hoe geef je een link naar een bestand door in een Intent?
sobes.tech AI
Antwoord van AI
Om een link naar een bestand door te geven in een Intent, wordt Uri gebruikt.
-
Gebruik van
FileProvider(Aanbevolen methode vanaf Android N):
De veiligste en aanbevolen methode, omdat hetFileUriExposedExceptionvoorkomt in de nieuwere versies van Android.-
FileProvidermoet worden gedefinieerd inAndroidManifest.xmlen er moet een XML-bestand worden gemaakt met de paden naar de bestanden. -
Uriverkrijgen metFileProvider.getUriForFile(). -
AndroidManifest.xml:<application> <provider android:name="androidx.core.content.FileProvider" android:authorities="${applicationId}.provider" android:exported="false" android:grantUriPermissions="true"> <meta-data android:name="android.support.FILE_PROVIDER_PATHS" android:resource="@xml/provider_paths"/> </provider> </application> -
res/xml/provider_paths.xml:<paths> <external-path name="external_files" path="."/> </paths> -
Overdrachtscode:
// Er wordt aangenomen dat 'file' een java.io.File-object is Uri fileUri = FileProvider.getUriForFile( context, context.getPackageName() + ".provider", file ); Intent intent = new Intent(Intent.ACTION_VIEW); intent.setDataAndType(fileUri, "application/pdf"); // Geef het juiste MIME-type op intent.addFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION); // Toestemming geven voor lezen if (intent.resolveActivity(context.getPackageManager()) != null) { context.startActivity(intent); }
-
-
Gebruik van
Uri.fromFile()(Verouderd vanaf Android N):
Deze methode wordt niet aanbevolen in de nieuwere versies van Android vanwege beveiligingsproblemen.-
Vanaf Android N veroorzaakt het overdragen van bestands-URI's via
IntenteenFileUriExposedExceptionbij interactie met andere apps. -
Overdrachtscode:
// Er wordt aangenomen dat 'file' een java.io.File-object is Uri fileUri = Uri.fromFile(file); Intent intent = new Intent(Intent.ACTION_VIEW); intent.setDataAndType(fileUri, "application/pdf"); // Geef het juiste MIME-type op // Deze code kan een `FileUriExposedException` veroorzaken op Android N+ bij interactie met andere apps if (intent.resolveActivity(context.getPackageManager()) != null) { context.startActivity(intent); }
-
Samenvatting:
| Methode | Aanbeveling (Android N+) | Veiligheid |
|---|---|---|
FileProvider |
✅ | Hoog (voorkomt FileUriExposedException) |
Uri.fromFile() |
❌ | Laag (kan FileUriExposedException veroorzaken) |
Gebruik altijd FileProvider voor het delen van bestanden tussen apps op Android N en hoger.