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.
-
A
FileProviderhasználata (Ajánlott módszer Android N és felette):
Ez a legbiztonságosabb és legajánlottabb módszer, mivel megakadályozza aFileUriExposedException-t a legújabb Android-verziókban.-
Meg kell határozni a
FileProvider-t azAndroidManifest.xml-ben, és létre kell hozni egy XML-fájlt az útvonalakkal a fájlokhoz. -
A
Uri-t aFileProvider.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); }
-
-
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-telFileUriExposedException-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.