Sobes.tech
Junior

Πώς να μεταδώσετε έναν σύνδεσμο σε ένα αρχείο σε ένα Intent;

sobes.tech AI

Απάντηση από AI

Για την αποστολή συνδέσμου αρχείου σε Intent χρησιμοποιείται το Uri.

  1. Χρήση του FileProvider (Συνιστώμενος τρόπος με Android N και άνω):
    Ο πιο ασφαλής και συστηνόμενος τρόπος, καθώς αποτρέπει το FileUriExposedException στις τελευταίες εκδόσεις Android.

    • Πρέπει να ορίσετε το FileProvider στο AndroidManifest.xml και να δημιουργήσετε ένα αρχείο XML με διαδρομές προς τα αρχεία.

    • Λάβετε το Uri με τη βοήθεια του 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>
      
    • Κώδικας μεταφοράς:

      // Υποθέτοντας ότι το 'file' είναι αντικείμενο java.io.File
      Uri fileUri = FileProvider.getUriForFile(
          context,
          context.getPackageName() + ".provider",
          file
      );
      
      Intent intent = new Intent(Intent.ACTION_VIEW);
      intent.setDataAndType(fileUri, "application/pdf"); // Ορίστε τον σωστό τύπο MIME
      intent.addFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION); // Δώστε άδεια ανάγνωσης
      
      if (intent.resolveActivity(context.getPackageManager()) != null) {
          context.startActivity(intent);
      }
      
  2. Χρήση του Uri.fromFile() (Απο deprecated από το Android N):
    Αυτή η μέθοδος δεν συνιστάται στις τελευταίες εκδόσεις Android λόγω ζητημάτων ασφαλείας.

    • Από το Android N και μετά, η μεταφορά αρχείων μέσω Intent προκαλεί το FileUriExposedException όταν αλληλεπιδρά με εφαρμογές που δεν ανήκουν στην τρέχουσα εφαρμογή.

    • Κώδικας μεταφοράς:

      // Υποθέτοντας ότι το 'file' είναι αντικείμενο java.io.File
      Uri fileUri = Uri.fromFile(file);
      
      Intent intent = new Intent(Intent.ACTION_VIEW);
      intent.setDataAndType(fileUri, "application/pdf"); // Ορίστε τον σωστό τύπο MIME
      
      // Αυτός ο κώδικας μπορεί να προκαλέσει FileUriExposedException στο Android N+ κατά την αλληλεπίδραση με άλλες εφαρμογές
      if (intent.resolveActivity(context.getPackageManager()) != null) {
          context.startActivity(intent);
      }
      

Συνοπτικός πίνακας:

Μέθοδος Συνιστώμενη (Android N+) Ασφάλεια
FileProvider Υψηλή (προλαμβάνει το FileUriExposedException)
Uri.fromFile() Χαμηλή (μπορεί να προκαλέσει FileUriExposedException)

Πάντα χρησιμοποιείτε το FileProvider για ανταλλαγή αρχείων μεταξύ εφαρμογών σε Android N και άνω.