Jak předat odkaz na soubor v Intent?
sobes.tech AI
Odpověď od AI
Pro předání odkazu na soubor v Intent se používá Uri.
-
Použití
FileProvider(Doporučený způsob od Android N výše):
Nejbezpečnější a doporučený způsob, protože zabraňujeFileUriExposedExceptionna nejnovějších verzích Androidu.-
Je nutné definovat
FileProvidervAndroidManifest.xmla vytvořit XML soubor s cestami k souborům. -
Získat
Uripomocí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> -
Kód přenosu:
// Předpokládá se, že 'file' je objekt java.io.File Uri fileUri = FileProvider.getUriForFile( context, context.getPackageName() + ".provider", file ); Intent intent = new Intent(Intent.ACTION_VIEW); intent.setDataAndType(fileUri, "application/pdf"); // Nastavte správný MIME typ intent.addFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION); // Udělit oprávnění ke čtení if (intent.resolveActivity(context.getPackageManager()) != null) { context.startActivity(intent); }
-
-
Použití
Uri.fromFile()(Zastaralé od Android N):
Tato metoda se nedoporučuje na nejnovějších verzích Androidu kvůli bezpečnostním problémům.-
Od Android N a výše, předávání souborových URI přes
IntentzpůsobujeFileUriExposedExceptionpři interakci s aplikacemi, které nepatří aktuální aplikaci. -
Kód přenosu:
// Předpokládá se, že 'file' je objekt java.io.File Uri fileUri = Uri.fromFile(file); Intent intent = new Intent(Intent.ACTION_VIEW); intent.setDataAndType(fileUri, "application/pdf"); // Nastavte správný MIME typ // Tento kód může vyvolat `FileUriExposedException` na Android N+ při interakci s jinými aplikacemi if (intent.resolveActivity(context.getPackageManager()) != null) { context.startActivity(intent); }
-
Stručná tabulka:
| Metoda | Doporučeno (Android N+) | Bezpečnost |
|---|---|---|
FileProvider |
✅ | Vysoká (zabraňuje FileUriExposedException) |
Uri.fromFile() |
❌ | Nízká (může způsobit FileUriExposedException) |
Vždy používejte FileProvider pro sdílení souborů mezi aplikacemi na Android N a vyšším.