Чӣ тавр бояд пайванди файлро дар 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 ва бештар истифода баред.