Πώς να μεταδώσετε έναν σύνδεσμο σε ένα αρχείο σε ένα Intent;
sobes.tech AI
Απάντηση από AI
Για την αποστολή συνδέσμου αρχείου σε Intent χρησιμοποιείται το Uri.
-
Χρήση του
FileProvider(Συνιστώμενος τρόπος με Android N και άνω):
Ο πιο ασφαλής και συστηνόμενος τρόπος, καθώς αποτρέπει τοFileUriExposedExceptionστις τελευταίες εκδόσεις Android.-
Πρέπει να ορίσετε το
FileProviderστοAndroidManifest.xmlκαι να δημιουργήσετε ένα αρχείο XML με διαδρομές προς τα αρχεία. -
Λάβετε το
Uriμε τη βοήθεια τουFileProvider.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> -
Κώδικας μεταφοράς:
// Υποθέτοντας ότι το 'file' είναι αντικείμενο java.io.File Uri fileUri = FileProvider.getUriForFile( context, context.getPackageName() + ".provider", file ); Intent intent = new Intent(Intent.ACTION_VIEW); intent.setDataAndType(fileUri, "application/pdf"); // Ορίστε τον σωστό τύπο MIME intent.addFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION); // Δώστε άδεια ανάγνωσης if (intent.resolveActivity(context.getPackageManager()) != null) { context.startActivity(intent); }
-
-
Χρήση του
Uri.fromFile()(Απο deprecated από το Android N):
Αυτή η μέθοδος δεν συνιστάται στις τελευταίες εκδόσεις Android λόγω ζητημάτων ασφαλείας.-
Από το Android N και μετά, η μεταφορά αρχείων μέσω
Intentπροκαλεί τοFileUriExposedExceptionόταν αλληλεπιδρά με εφαρμογές που δεν ανήκουν στην τρέχουσα εφαρμογή. -
Κώδικας μεταφοράς:
// Υποθέτοντας ότι το 'file' είναι αντικείμενο java.io.File Uri fileUri = Uri.fromFile(file); Intent intent = new Intent(Intent.ACTION_VIEW); intent.setDataAndType(fileUri, "application/pdf"); // Ορίστε τον σωστό τύπο MIME // Αυτός ο κώδικας μπορεί να προκαλέσει FileUriExposedException στο Android N+ κατά την αλληλεπίδραση με άλλες εφαρμογές if (intent.resolveActivity(context.getPackageManager()) != null) { context.startActivity(intent); }
-
Συνοπτικός πίνακας:
| Μέθοδος | Συνιστώμενη (Android N+) | Ασφάλεια |
|---|---|---|
FileProvider |
✅ | Υψηλή (προλαμβάνει το FileUriExposedException) |
Uri.fromFile() |
❌ | Χαμηλή (μπορεί να προκαλέσει FileUriExposedException) |
Πάντα χρησιμοποιείτε το FileProvider για ανταλλαγή αρχείων μεταξύ εφαρμογών σε Android N και άνω.