Jak przekazać link do pliku w Intent?
sobes.tech AI
Odpowiedź od AI
Aby przekazać odnośnik do pliku w Intent, używa się Uri.
-
Użycie
FileProvider(Zalecany sposób od Android N wzwyż):
Najbezpieczniejszy i zalecany sposób, ponieważ zapobiegaFileUriExposedExceptionw nowszych wersjach Androida.-
Należy zdefiniować
FileProviderwAndroidManifest.xmli utworzyć plik XML z ścieżkami do plików. -
Uzyskać
Uriza pomocą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> -
Kod transferu:
// Zakłada się, że 'file' jest obiektem java.io.File Uri fileUri = FileProvider.getUriForFile( context, context.getPackageName() + ".provider", file ); Intent intent = new Intent(Intent.ACTION_VIEW); intent.setDataAndType(fileUri, "application/pdf"); // Podaj właściwy MIME type intent.addFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION); // Przyznaj uprawnienie do odczytu if (intent.resolveActivity(context.getPackageManager()) != null) { context.startActivity(intent); }
-
-
Użycie
Uri.fromFile()(Przestarzałe od Android N):
Metoda ta nie jest zalecana w nowszych wersjach Androida ze względu na problemy z bezpieczeństwem.-
Od Android N, przekazywanie URI plików przez
IntentpowodujeFileUriExposedExceptionpodczas interakcji z aplikacjami spoza tej samej aplikacji. -
Kod transferu:
// Zakłada się, że 'file' jest obiektem java.io.File Uri fileUri = Uri.fromFile(file); Intent intent = new Intent(Intent.ACTION_VIEW); intent.setDataAndType(fileUri, "application/pdf"); // Podaj właściwy MIME type // Ten kod może wywołać `FileUriExposedException` na Android N+ podczas interakcji z innymi aplikacjami if (intent.resolveActivity(context.getPackageManager()) != null) { context.startActivity(intent); }
-
Podsumowanie:
| Metoda | Rekomendacja (Android N+) | Bezpieczeństwo |
|---|---|---|
FileProvider |
✅ | Wysoka (zapobiega FileUriExposedException) |
Uri.fromFile() |
❌ | Niska (może wywołać FileUriExposedException) |
Zawsze używaj FileProvider do wymiany plików między aplikacjami na Android N i wyższych.