Как да предадете връзка към файл в Intent?
sobes.tech AI
Отговор от 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> -
Код за прехвърляне:
// Предполага се, че '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 тип intent.addFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION); // Предоставяне на разрешение за четене if (intent.resolveActivity(context.getPackageManager()) != null) { context.startActivity(intent); }
-
-
Използване на
Uri.fromFile()(Застарял от Android N):
Този метод не се препоръчва в последните версии на Android поради проблеми с безопасността.-
От Android N нататък, предаването на файлови URI чрез
IntentпредизвикваFileUriExposedException, когато се взаимодейства с приложения, които не принадлежат на текущото приложение. -
Код за прехвърляне:
// Предполага се, че 'file' е обект java.io.File Uri fileUri = Uri.fromFile(file); Intent intent = new Intent(Intent.ACTION_VIEW); intent.setDataAndType(fileUri, "application/pdf"); // Задайте правилния MIME тип // Този код може да предизвика `FileUriExposedException` на Android N+ при взаимодействие с други приложения if (intent.resolveActivity(context.getPackageManager()) != null) { context.startActivity(intent); }
-
Кратка таблица:
| Метод | Препоръчително (Android N+) | Безопасност |
|---|---|---|
FileProvider |
✅ | Висока (предотвратява FileUriExposedException) |
Uri.fromFile() |
❌ | Ниска (може да предизвика FileUriExposedException) |
Винаги използвайте FileProvider за споделяне на файлове между приложения на Android N и по-нови версии.