Sobes.tech
Junior

Intentda faylga havolani qanday yuborish mumkin?

sobes.tech AI

AIdan javob

Faylga havola yuborish uchun Intent ichida Uri ishlatiladi.

  1. FileProviderdan foydalanish (Android N va yuqori uchun tavsiya etilgan usul):
    Eng xavfsiz va tavsiya etilgan usul, chunki u Androidning so'nggi versiyalarida FileUriExposedExceptionni oldini oladi.

    • AndroidManifest.xmlda FileProviderni aniqlash va fayllarga yo'llar bo'yicha XML fayl yaratish zarur.

    • FileProvider.getUriForFile() yordamida Uri olish.

    • 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);
      }
      
  2. 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, Intent orqali fayl URI'larini uzatish FileUriExposedException xatosiga 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.