Como passar um link para um arquivo no Intent?
sobes.tech IA
Resposta da IA
Para passar um link para um ficheiro numa Intent, utiliza-se Uri.
-
Utilização de
FileProvider(Método recomendado com Android N e superior):
A forma mais segura e recomendada, pois previneFileUriExposedExceptionnas versões mais recentes do Android.-
É necessário definir
FileProvidernoAndroidManifest.xmle criar um ficheiro XML com os caminhos para os ficheiros. -
Obter
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 transferência:
// Assume-se que 'file' é um 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 o MIME type correto intent.addFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION); // Conceder permissão de leitura if (intent.resolveActivity(context.getPackageManager()) != null) { context.startActivity(intent); }
-
-
Utilização de
Uri.fromFile()(Obsoleto no Android N):
Este método não é recomendado usar nas versões mais recentes do Android devido a problemas de segurança.-
A partir do Android N, transferir URIs de ficheiros via
IntentprovocaFileUriExposedExceptionao interagir com aplicações que não pertencem à mesma aplicação. -
Código de transferência:
// Assume-se que 'file' é um objeto java.io.File Uri fileUri = Uri.fromFile(file); Intent intent = new Intent(Intent.ACTION_VIEW); intent.setDataAndType(fileUri, "application/pdf"); // Especifique o MIME type correto // Este código pode provocar `FileUriExposedException` no Android N+ ao interagir com outras aplicações if (intent.resolveActivity(context.getPackageManager()) != null) { context.startActivity(intent); }
-
Tabela resumida:
| Método | Recomendação (Android N+) | Segurança |
|---|---|---|
FileProvider |
✅ | Alta (previne FileUriExposedException) |
Uri.fromFile() |
❌ | Baixa (pode causar FileUriExposedException) |
Sempre utilize FileProvider para troca de ficheiros entre aplicações no Android N e superior.