Comment transmettre un lien vers un fichier dans un Intent?
sobes.tech IA
Réponse de l'IA
Pour transmettre un lien vers un fichier dans un Intent, utilisez Uri.
-
Utilisation de
FileProvider(Méthode recommandée avec Android N et supérieur):
La méthode la plus sûre et recommandée, car elle empêcheFileUriExposedExceptionsur les versions récentes d'Android.-
Il est nécessaire de définir
FileProviderdansAndroidManifest.xmlet de créer un fichier XML avec les chemins vers les fichiers. -
Obtenir
UriavecFileProvider.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> -
Code de transfert:
// Supposons que 'file' est un objet java.io.File Uri fileUri = FileProvider.getUriForFile( context, context.getPackageName() + ".provider", file ); Intent intent = new Intent(Intent.ACTION_VIEW); intent.setDataAndType(fileUri, "application/pdf"); // Spécifiez le bon type MIME intent.addFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION); // Accorder la permission de lecture if (intent.resolveActivity(context.getPackageManager()) != null) { context.startActivity(intent); }
-
-
Utilisation de
Uri.fromFile()(Obsolète en Android N):
Cette méthode n'est pas recommandée pour les versions récentes d'Android en raison de problèmes de sécurité.-
À partir d'Android N, le transfert d'URI de fichiers via
IntentprovoqueFileUriExposedExceptionlors de l'interaction avec des applications non appartenant à la même application. -
Code de transfert:
// Supposons que 'file' est un objet java.io.File Uri fileUri = Uri.fromFile(file); Intent intent = new Intent(Intent.ACTION_VIEW); intent.setDataAndType(fileUri, "application/pdf"); // Spécifiez le bon type MIME // Ce code peut provoquer une `FileUriExposedException` sur Android N+ lors de l'interaction avec d'autres applications if (intent.resolveActivity(context.getPackageManager()) != null) { context.startActivity(intent); }
-
Tableau résumé:
| Méthode | Recommandation (Android N+) | Sécurité |
|---|---|---|
FileProvider |
✅ | Élevée (empêche FileUriExposedException) |
Uri.fromFile() |
❌ | Faible (peut provoquer FileUriExposedException) |
Utilisez toujours FileProvider pour partager des fichiers entre applications sur Android N et supérieur.