Sobes.tech
Junior

Kā nodot saiti uz failu Intent?

sobes.tech AI

Atbilde no AI

Lai nodotu saiti uz failu Intent, tiek izmantots Uri.

  1. FileProvider izmantošana (ieteicamais veids ar Android N un jaunākām versijām):
    Visdrošākais un ieteicamākais veids, jo novērš FileUriExposedException jaunākajās Android versijās.

    • Jādefinē FileProvider AndroidManifest.xml un jāizveido XML fails ar ceļiem uz failiem.

    • Jāiegūst Uri ar 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>
      
    • Pārneses kods:

      // Pieņem, ka 'file' ir java.io.File objekts
      Uri fileUri = FileProvider.getUriForFile(
          context,
          context.getPackageName() + ".provider",
          file
      );
      
      Intent intent = new Intent(Intent.ACTION_VIEW);
      intent.setDataAndType(fileUri, "application/pdf"); // Norādiet pareizo MIME tipu
      intent.addFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION); // Dot atļauju lasīšanai
      
      if (intent.resolveActivity(context.getPackageManager()) != null) {
          context.startActivity(intent);
      }
      
  2. Uri.fromFile() izmantošana (novecojusi ar Android N):
    Šo metodi neiesaka izmantot jaunākajās Android versijās drošības iemeslu dēļ.

    • Sākot ar Android N, failu URI nodošana ar Intent izraisa FileUriExposedException, sadarbojoties ar citām lietojumprogrammām, kas nepieder pašreizējai lietojumprogrammai.

    • Pārneses kods:

      // Pieņem, ka 'file' ir java.io.File objekts
      Uri fileUri = Uri.fromFile(file);
      
      Intent intent = new Intent(Intent.ACTION_VIEW);
      intent.setDataAndType(fileUri, "application/pdf"); // Norādiet pareizo MIME tipu
      
      // Šis kods var izraisīt `FileUriExposedException` ar Android N+ sadarbojoties ar citām lietojumprogrammām
      if (intent.resolveActivity(context.getPackageManager()) != null) {
          context.startActivity(intent);
      }
      

Īss tabulas pārskats:

Metode Ieteicamība (Android N+) Drošība
FileProvider Augsta (novērš FileUriExposedException)
Uri.fromFile() Zema (var izraisīt FileUriExposedException)

Vienmēr izmantojiet FileProvider failu apmaiņai starp lietojumprogrammām Android N un jaunākās versijās.