Come passare un link a un file in un Intent?
sobes.tech AI
Risposta dell'AI
Per passare un collegamento a un file in un Intent, si utilizza Uri.
-
Utilizzo di
FileProvider(Metodo raccomandato con Android N e versioni successive):
Il metodo più sicuro e raccomandato, in quanto previeneFileUriExposedExceptionnelle versioni più recenti di Android.-
È necessario definire
FileProvidernelAndroidManifest.xmle creare un file XML con i percorsi ai file. -
Ottenere
UritramiteFileProvider.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> -
Codice di trasferimento:
// Si assume che 'file' sia un oggetto java.io.File Uri fileUri = FileProvider.getUriForFile( context, context.getPackageName() + ".provider", file ); Intent intent = new Intent(Intent.ACTION_VIEW); intent.setDataAndType(fileUri, "application/pdf"); // Specificare il MIME type corretto intent.addFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION); // Concedere permesso di lettura if (intent.resolveActivity(context.getPackageManager()) != null) { context.startActivity(intent); }
-
-
Utilizzo di
Uri.fromFile()(Obsoleto con Android N):
Questo metodo non è raccomandato nelle versioni più recenti di Android a causa di problemi di sicurezza.-
A partire da Android N, il trasferimento di URI di file tramite
IntentprovocaFileUriExposedExceptionquando si interagisce con applicazioni non appartenenti alla stessa app. -
Codice di trasferimento:
// Si assume che 'file' sia un oggetto java.io.File Uri fileUri = Uri.fromFile(file); Intent intent = new Intent(Intent.ACTION_VIEW); intent.setDataAndType(fileUri, "application/pdf"); // Specificare il MIME type corretto // Questo codice può causare `FileUriExposedException` su Android N+ durante l'interazione con altre applicazioni if (intent.resolveActivity(context.getPackageManager()) != null) { context.startActivity(intent); }
-
Tabella riassuntiva:
| Metodo | Raccomandazione (Android N+) | Sicurezza |
|---|---|---|
FileProvider |
✅ | Alta (previene FileUriExposedException) |
Uri.fromFile() |
❌ | Bassa (può causare FileUriExposedException) |
Utilizzare sempre FileProvider per condividere file tra applicazioni su Android N e versioni successive.