Sobes.tech
Junior

Intentdə fayla link necə göndərilir?

sobes.tech Süni İntellekt

AI-dan cavab

Fayla keçidini Intent daxilində ötürmək üçün Uri istifadə olunur.

  1. FileProvider istifadə etmək (Android N və yuxarı üçün tövsiyə olunan üsul):
    Ən təhlükəsiz və tövsiyə olunan üsul, çünki bu, Android-un ən son versiyalarında FileUriExposedException-u qarşısını alır.

    • AndroidManifest.xml daxilində FileProvider təyin edilməli və fayllara yolları göstərən XML faylı yaradılmalıdır.

    • FileProvider.getUriForFile() istifadə edilərək Uri alınmalıdır.

    • 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>
      
    • Köçürmə kodu:

      // 'file' obyektinin java.io.File olduğunu fərz edirik
      Uri fileUri = FileProvider.getUriForFile(
          context,
          context.getPackageName() + ".provider",
          file
      );
      
      Intent intent = new Intent(Intent.ACTION_VIEW);
      intent.setDataAndType(fileUri, "application/pdf"); // Düzgün MIME tipini göstərin
      intent.addFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION); // Oxuma icazəsi verin
      
      if (intent.resolveActivity(context.getPackageManager()) != null) {
          context.startActivity(intent);
      }
      
  2. Uri.fromFile() istifadə etmək (Android N-dən etibarən köhnəlmiş):
    Bu metod təhlükəsizlik problemləri səbəbindən Android N və daha yuxarı versiyalarda tövsiyə edilmir.

    • Android N-dən etibarən, Intent vasitəsilə fayl URI-larının ötürülməsi FileUriExposedException-a səbəb olur, çünki bu, digər tətbiqlərlə qarşılıqlı əlaqədə olur.

    • Köçürmə kodu:

      // 'file' obyektinin java.io.File olduğunu fərz edirik
      Uri fileUri = Uri.fromFile(file);
      
      Intent intent = new Intent(Intent.ACTION_VIEW);
      intent.setDataAndType(fileUri, "application/pdf"); // Düzgün MIME tipini göstərin
      
      // Bu kod Android N+ da digər tətbiqlərlə qarşılıqlı əlaqədə `FileUriExposedException`-a səbəb ola bilər
      if (intent.resolveActivity(context.getPackageManager()) != null) {
          context.startActivity(intent);
      }
      

Qısa cədvəl:

Metod Tövsiyə (Android N+) Təhlükəsizlik
FileProvider Yüksək ( FileUriExposedException-u qarşısını alır)
Uri.fromFile() Aşağı ( FileUriExposedException-a səbəb ola bilər)

Həmişə FileProvider istifadə edin, Android N və yuxarı versiyalarda tətbiqlər arasında fayl paylaşımı üçün.