Sobes.tech
Junior

Hogyan továbbítson egy linket egy fájlhoz egy Intentben?

sobes.tech MI

Válasz az MI-től

A fájl hivatkozásának átadásához az Intent-ben a Uri használatos.

  1. A FileProvider használata (Ajánlott módszer Android N és felette):
    Ez a legbiztonságosabb és legajánlottabb módszer, mivel megakadályozza a FileUriExposedException-t a legújabb Android-verziókban.

    • Meg kell határozni a FileProvider-t az AndroidManifest.xml-ben, és létre kell hozni egy XML-fájlt az útvonalakkal a fájlokhoz.

    • A Uri-t a FileProvider.getUriForFile() segítségével szerezheti be.

    • 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>
      
    • Átviteli kód:

      // Feltételezve, hogy a 'file' egy java.io.File objektum
      Uri fileUri = FileProvider.getUriForFile(
          context,
          context.getPackageName() + ".provider",
          file
      );
      
      Intent intent = new Intent(Intent.ACTION_VIEW);
      intent.setDataAndType(fileUri, "application/pdf"); // Állítsa be a helyes MIME típust
      intent.addFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION); // Engedély megadása olvasásra
      
      if (intent.resolveActivity(context.getPackageManager()) != null) {
          context.startActivity(intent);
      }
      
  2. A Uri.fromFile() használata (Elavult Android N-től):
    Ez a módszer nem ajánlott a legújabb Android-verziókban biztonsági problémák miatt.

    • Android N-től kezdve a fájlok átadása Intent-tel FileUriExposedException-t vált ki, ha más alkalmazásokkal lép kapcsolatba.

    • Átviteli kód:

      // Feltételezve, hogy a 'file' egy java.io.File objektum
      Uri fileUri = Uri.fromFile(file);
      
      Intent intent = new Intent(Intent.ACTION_VIEW);
      intent.setDataAndType(fileUri, "application/pdf"); // Állítsa be a helyes MIME típust
      
      // Ez a kód `FileUriExposedException`-t okozhat Android N+ esetén más alkalmazásokkal való interakció során
      if (intent.resolveActivity(context.getPackageManager()) != null) {
          context.startActivity(intent);
      }
      

Rövid táblázat:

Módszer Ajánlott (Android N+) Biztonság
FileProvider Magas (megakadályozza a FileUriExposedException-t)
Uri.fromFile() Alacsony (kiválthatja a FileUriExposedException-t)

Mindig használja a FileProvider-t fájlok megosztására Android N és felett.