Cum se transmite un link către un fișier într-un Intent?
sobes.tech AI
Răspuns de la AI
Pentru a transmite un link către un fișier într-un Intent, se utilizează Uri.
-
Utilizarea
FileProvider(Metoda recomandată de la Android N în sus):
Cel mai sigur și recomandat mod, deoarece previneFileUriExposedExceptionpe versiunile mai noi de Android.-
Este necesar să definiți
FileProviderînAndroidManifest.xmlși să creați un fișier XML cu căile către fișiere. -
Obțineți
UrifolosindFileProvider.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> -
Codul de transfer:
// Se presupune că 'file' este un obiect java.io.File Uri fileUri = FileProvider.getUriForFile( context, context.getPackageName() + ".provider", file ); Intent intent = new Intent(Intent.ACTION_VIEW); intent.setDataAndType(fileUri, "application/pdf"); // Specificați tipul MIME corect intent.addFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION); // Acordați permisiunea de citire if (intent.resolveActivity(context.getPackageManager()) != null) { context.startActivity(intent); }
-
-
Utilizarea
Uri.fromFile()(Deprecate în Android N):
Această metodă nu este recomandată în versiunile mai noi de Android din cauza problemelor de securitate.-
Începând cu Android N, transferul URI-urilor de fișiere prin
IntentprovoacăFileUriExposedExceptionla interacțiunea cu aplicații care nu aparțin aceleiași aplicații. -
Codul de transfer:
// Se presupune că 'file' este un obiect java.io.File Uri fileUri = Uri.fromFile(file); Intent intent = new Intent(Intent.ACTION_VIEW); intent.setDataAndType(fileUri, "application/pdf"); // Specificați tipul MIME corect // Acest cod poate provoca `FileUriExposedException` pe Android N+ la interacțiunea cu alte aplicații if (intent.resolveActivity(context.getPackageManager()) != null) { context.startActivity(intent); }
-
Rezumat:
| Metodă | Recomandare (Android N+) | Securitate |
|---|---|---|
FileProvider |
✅ | Înaltă (previne FileUriExposedException) |
Uri.fromFile() |
❌ | Scăzută (poate provoca FileUriExposedException) |
Utilizați întotdeauna FileProvider pentru partajarea fișierelor între aplicații pe Android N și versiuni ulterioare.