Sobes.tech
Junior

Hoe geef je een link naar een bestand door in een Intent?

sobes.tech AI

Antwoord van AI

Om een link naar een bestand door te geven in een Intent, wordt Uri gebruikt.

  1. Gebruik van FileProvider (Aanbevolen methode vanaf Android N):
    De veiligste en aanbevolen methode, omdat het FileUriExposedException voorkomt in de nieuwere versies van Android.

    • FileProvider moet worden gedefinieerd in AndroidManifest.xml en er moet een XML-bestand worden gemaakt met de paden naar de bestanden.

    • Uri verkrijgen met 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>
      
    • Overdrachtscode:

      // Er wordt aangenomen dat 'file' een java.io.File-object is
      Uri fileUri = FileProvider.getUriForFile(
          context,
          context.getPackageName() + ".provider",
          file
      );
      
      Intent intent = new Intent(Intent.ACTION_VIEW);
      intent.setDataAndType(fileUri, "application/pdf"); // Geef het juiste MIME-type op
      intent.addFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION); // Toestemming geven voor lezen
      
      if (intent.resolveActivity(context.getPackageManager()) != null) {
          context.startActivity(intent);
      }
      
  2. Gebruik van Uri.fromFile() (Verouderd vanaf Android N):
    Deze methode wordt niet aanbevolen in de nieuwere versies van Android vanwege beveiligingsproblemen.

    • Vanaf Android N veroorzaakt het overdragen van bestands-URI's via Intent een FileUriExposedException bij interactie met andere apps.

    • Overdrachtscode:

      // Er wordt aangenomen dat 'file' een java.io.File-object is
      Uri fileUri = Uri.fromFile(file);
      
      Intent intent = new Intent(Intent.ACTION_VIEW);
      intent.setDataAndType(fileUri, "application/pdf"); // Geef het juiste MIME-type op
      
      // Deze code kan een `FileUriExposedException` veroorzaken op Android N+ bij interactie met andere apps
      if (intent.resolveActivity(context.getPackageManager()) != null) {
          context.startActivity(intent);
      }
      

Samenvatting:

Methode Aanbeveling (Android N+) Veiligheid
FileProvider Hoog (voorkomt FileUriExposedException)
Uri.fromFile() Laag (kan FileUriExposedException veroorzaken)

Gebruik altijd FileProvider voor het delen van bestanden tussen apps op Android N en hoger.