Sobes.tech
Junior

Kuidas edastada faili link Intentis?

sobes.tech AI

Vastus AI-lt

Faili viitamiseks Intent kaudu kasutatakse Uri.

  1. FileProvider kasutamine (soovitatav viis Android N ja uuemate versioonide puhul):
    Kõige turvalisem ja soovitatav viis, kuna see takistab FileUriExposedException tekkimist uusimates Androidi versioonides.

    • Määrake FileProvider AndroidManifest.xml ja looge XML-fail failide teede määramiseks.

    • Saage Uri FileProvider.getUriForFile() abil.

    • 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>
      
    • Koodülekandmine:

      // Eeldatakse, et 'file' on java.io.File objekt
      Uri fileUri = FileProvider.getUriForFile(
          context,
          context.getPackageName() + ".provider",
          file
      );
      
      Intent intent = new Intent(Intent.ACTION_VIEW);
      intent.setDataAndType(fileUri, "application/pdf"); // Määrake õige MIME tüüp
      intent.addFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION); // Luba lugemisõigus
      
      if (intent.resolveActivity(context.getPackageManager()) != null) {
          context.startActivity(intent);
      }
      
  2. Uri.fromFile() kasutamine (vananenud Android N puhul):
    Seda meetodit ei soovitata kasutada uusimates Androidi versioonides turvalisuse tõttu.

    • Alates Android N-st põhjustab faili URI edastamine Intent kaudu FileUriExposedException, kui see toimub teiste rakendustega, mis ei kuulu praegusele rakendusele.

    • Kood näide:

      // Eeldatakse, et 'file' on java.io.File objekt
      Uri fileUri = Uri.fromFile(file);
      
      Intent intent = new Intent(Intent.ACTION_VIEW);
      intent.setDataAndType(fileUri, "application/pdf"); // Määrake õige MIME tüüp
      
      // See kood võib põhjustada `FileUriExposedException` Android N+ puhul teiste rakendustega suhtlemisel
      if (intent.resolveActivity(context.getPackageManager()) != null) {
          context.startActivity(intent);
      }
      

Lühike tabel:

Meetod Soovitus (Android N+) Turvalisus
FileProvider Kõrge (takistab FileUriExposedException)
Uri.fromFile() Madal (võib põhjustada FileUriExposedException)

Alati kasutage FileProvider failide vahetamiseks Android N ja uuemate rakenduste vahel.