Как передать ссылку на файл в Intent?
Sobes Copilot
Get answers in real time
Answer from AI
sobes.tech AI
Для передачи ссылки на файл в Intent используется Uri.
-
Использование
FileProvider(Рекомендуемый способ с Android N и выше):
Наиболее безопасный и рекомендуемый способ, так как предотвращаетFileUriExposedExceptionна последних версиях Android.-
Необходимо определить
FileProviderвAndroidManifest.xmlи создать XML-файл с путями к файлам. -
Получить
Uriс помощью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> -
Transferring code:
// Предполагается, что 'file' - это объект java.io.File Uri fileUri = FileProvider.getUriForFile( context, context.getPackageName() + ".provider", file ); Intent intent = new Intent(Intent.ACTION_VIEW); intent.setDataAndType(fileUri, "application/pdf"); // Укажите правильный MIME type intent.addFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION); // Предоставить разрешение на чтение if (intent.resolveActivity(context.getPackageManager()) != null) { context.startActivity(intent); }
-
-
Использование
Uri.fromFile()(Deprecated с Android N):
Этот метод не рекомендуется использовать на последних версиях Android из-за проблем с безопасностью.-
Начиная с Android N, передача файловых URI через
IntentвызываетFileUriExposedExceptionпри взаимодействии с приложениями, не принадлежащими текущему приложению. -
Transferring code:
// Предполагается, что 'file' - это объект java.io.File Uri fileUri = Uri.fromFile(file); Intent intent = new Intent(Intent.ACTION_VIEW); intent.setDataAndType(fileUri, "application/pdf"); // Укажите правильный MIME type // Этот код может вызвать FileUriExposedException на Android N+ при взаимодействии с другими приложениями if (intent.resolveActivity(context.getPackageManager()) != null) { context.startActivity(intent); }
-
Краткая таблица:
| Метод | Рекомендация (Android N+) | Безопасность |
|---|---|---|
FileProvider |
✅ | Высокая (предотвращает FileUriExposedException) |
Uri.fromFile() |
❌ | Низкая (может вызвать FileUriExposedException) |
Всегда используйте FileProvider для обмена файлами между приложениями на Android N и выше.