Sobes.tech
Junior

Cum se transmite un link către un fișier într-un Intent?

sobes.tech AI

Răspuns de la AI

Pentru a transmite un link către un fișier într-un Intent, se utilizează Uri.

  1. Utilizarea FileProvider (Metoda recomandată de la Android N în sus):
    Cel mai sigur și recomandat mod, deoarece previne FileUriExposedException pe versiunile mai noi de Android.

    • Este necesar să definiți FileProvider în AndroidManifest.xml și să creați un fișier XML cu căile către fișiere.

    • Obțineți Uri folosind 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>
      
    • Codul de transfer:

      // Se presupune că 'file' este un obiect java.io.File
      Uri fileUri = FileProvider.getUriForFile(
          context,
          context.getPackageName() + ".provider",
          file
      );
      
      Intent intent = new Intent(Intent.ACTION_VIEW);
      intent.setDataAndType(fileUri, "application/pdf"); // Specificați tipul MIME corect
      intent.addFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION); // Acordați permisiunea de citire
      
      if (intent.resolveActivity(context.getPackageManager()) != null) {
          context.startActivity(intent);
      }
      
  2. Utilizarea Uri.fromFile() (Deprecate în Android N):
    Această metodă nu este recomandată în versiunile mai noi de Android din cauza problemelor de securitate.

    • Începând cu Android N, transferul URI-urilor de fișiere prin Intent provoacă FileUriExposedException la interacțiunea cu aplicații care nu aparțin aceleiași aplicații.

    • Codul de transfer:

      // Se presupune că 'file' este un obiect java.io.File
      Uri fileUri = Uri.fromFile(file);
      
      Intent intent = new Intent(Intent.ACTION_VIEW);
      intent.setDataAndType(fileUri, "application/pdf"); // Specificați tipul MIME corect
      
      // Acest cod poate provoca `FileUriExposedException` pe Android N+ la interacțiunea cu alte aplicații
      if (intent.resolveActivity(context.getPackageManager()) != null) {
          context.startActivity(intent);
      }
      

Rezumat:

Metodă Recomandare (Android N+) Securitate
FileProvider Înaltă (previne FileUriExposedException)
Uri.fromFile() Scăzută (poate provoca FileUriExposedException)

Utilizați întotdeauna FileProvider pentru partajarea fișierelor între aplicații pe Android N și versiuni ulterioare.