Intentda faylga havolani qanday yuborish mumkin?
sobes.tech AI
AIdan javob
Faylga havola yuborish uchun Intent ichida Uri ishlatiladi.
-
FileProviderdan foydalanish (Android N va yuqori uchun tavsiya etilgan usul):
Eng xavfsiz va tavsiya etilgan usul, chunki u Androidning so'nggi versiyalaridaFileUriExposedExceptionni oldini oladi.-
AndroidManifest.xmldaFileProviderni aniqlash va fayllarga yo'llar bo'yicha XML fayl yaratish zarur. -
FileProvider.getUriForFile()yordamidaUriolish. -
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> -
Ko'da uzatish:
// 'file' obyektining java.io.File ekanligini faraz qilamiz Uri fileUri = FileProvider.getUriForFile( context, context.getPackageName() + ".provider", file ); Intent intent = new Intent(Intent.ACTION_VIEW); intent.setDataAndType(fileUri, "application/pdf"); // To'g'ri MIME turini ko'rsating intent.addFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION); // O'qish uchun ruxsat berish if (intent.resolveActivity(context.getPackageManager()) != null) { context.startActivity(intent); }
-
-
Uri.fromFile()dan foydalanish (Android N dan boshlab eskirgan):
Bu usul xavfsizlik muammolari sababli Android N va undan keyingi versiyalarda tavsiya etilmaydi.-
Android N dan boshlab,
Intentorqali fayl URI'larini uzatishFileUriExposedExceptionxatosiga olib keladi, chunki u boshqa ilovalar bilan interaktsiyada bo'ladi. -
Uzatish kodlari:
// 'file' obyektining java.io.File ekanligini faraz qilamiz Uri fileUri = Uri.fromFile(file); Intent intent = new Intent(Intent.ACTION_VIEW); intent.setDataAndType(fileUri, "application/pdf"); // To'g'ri MIME turini ko'rsating // Bu kod Android N+ da boshqa ilovalar bilan interaktsiyada `FileUriExposedException`ni chaqirishi mumkin if (intent.resolveActivity(context.getPackageManager()) != null) { context.startActivity(intent); }
-
Qisqacha jadval:
| Usul | Tavsiya (Android N+) | Xavfsizlik |
|---|---|---|
FileProvider |
✅ | Yuqori ( FileUriExposedExceptionni oldini oladi) |
Uri.fromFile() |
❌ | Past ( FileUriExposedExceptionni chaqirishi mumkin) |
Har doim FileProviderdan foydalaning, Android N va undan yuqori versiyalarda ilovalar o'rtasida fayllarni almashish uchun.