¿Cómo pasar un enlace a un archivo en un Intent?
sobes.tech AI
Respuesta de la IA
Para pasar un enlace a un archivo en un Intent, se utiliza Uri.
-
Uso de
FileProvider(Método recomendado con Android N y superior):
La forma más segura y recomendada, ya que previeneFileUriExposedExceptionen las versiones más recientes de Android.-
Es necesario definir
FileProviderenAndroidManifest.xmly crear un archivo XML con las rutas a los archivos. -
Obtener
UriusandoFileProvider.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> -
Código de transferencia:
// Se asume que 'file' es un objeto java.io.File Uri fileUri = FileProvider.getUriForFile( context, context.getPackageName() + ".provider", file ); Intent intent = new Intent(Intent.ACTION_VIEW); intent.setDataAndType(fileUri, "application/pdf"); // Especifique el MIME type correcto intent.addFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION); // Conceder permiso de lectura if (intent.resolveActivity(context.getPackageManager()) != null) { context.startActivity(intent); }
-
-
Uso de
Uri.fromFile()(Obsoleto en Android N):
Este método no se recomienda usar en las versiones más recientes de Android debido a problemas de seguridad.-
A partir de Android N, transferir archivos URI a través de
IntentprovocaFileUriExposedExceptional interactuar con aplicaciones que no pertenecen a la misma app. -
Código de transferencia:
// Se asume que 'file' es un objeto java.io.File Uri fileUri = Uri.fromFile(file); Intent intent = new Intent(Intent.ACTION_VIEW); intent.setDataAndType(fileUri, "application/pdf"); // Especifique el MIME type correcto // Este código puede provocar FileUriExposedException en Android N+ al interactuar con otras aplicaciones if (intent.resolveActivity(context.getPackageManager()) != null) { context.startActivity(intent); }
-
Tabla resumida:
| Método | Recomendación (Android N+) | Seguridad |
|---|---|---|
FileProvider |
✅ | Alta (previene FileUriExposedException) |
Uri.fromFile() |
❌ | Baja (puede causar FileUriExposedException) |
Siempre utilice FileProvider para compartir archivos entre aplicaciones en Android N y superior.