Wie überträgt man einen Link zu einer Datei in einem Intent?
sobes.tech KI
Antwort von AI
Um eine Datei-URL in einem Intent zu übergeben, wird Uri verwendet.
-
Verwendung von
FileProvider(Empfohlene Methode ab Android N):
Die sicherste und empfohlene Methode, da sieFileUriExposedExceptionin den neueren Android-Versionen verhindert.-
Es ist notwendig,
FileProviderinAndroidManifest.xmlzu definieren und eine XML-Datei mit den Pfaden zu den Dateien zu erstellen. -
UrimitFileProvider.getUriForFile()erhalten. -
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> -
Übertragungscode:
// Es wird angenommen, dass 'file' ein java.io.File-Objekt ist Uri fileUri = FileProvider.getUriForFile( context, context.getPackageName() + ".provider", file ); Intent intent = new Intent(Intent.ACTION_VIEW); intent.setDataAndType(fileUri, "application/pdf"); // Geben Sie den richtigen MIME-Typ an intent.addFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION); // Leseberechtigung gewähren if (intent.resolveActivity(context.getPackageManager()) != null) { context.startActivity(intent); }
-
-
Verwendung von
Uri.fromFile()(Veraltet ab Android N):
Diese Methode wird auf den neueren Android-Versionen nicht empfohlen, da sie Sicherheitsprobleme verursacht.-
Ab Android N führt das Übertragen von Date-URIs über
IntentzuFileUriExposedException, wenn mit Anwendungen interagiert wird, die nicht zur aktuellen Anwendung gehören. -
Übertragungscode:
// Es wird angenommen, dass 'file' ein java.io.File-Objekt ist Uri fileUri = Uri.fromFile(file); Intent intent = new Intent(Intent.ACTION_VIEW); intent.setDataAndType(fileUri, "application/pdf"); // Geben Sie den richtigen MIME-Typ an // Dieser Code kann bei Interaktion mit anderen Anwendungen eine `FileUriExposedException` auslösen if (intent.resolveActivity(context.getPackageManager()) != null) { context.startActivity(intent); }
-
Kurzfassung:
| Methode | Empfehlung (Android N+) | Sicherheit |
|---|---|---|
FileProvider |
✅ | Hoch (verhindert FileUriExposedException) |
Uri.fromFile() |
❌ | Niedrig (kann FileUriExposedException verursachen) |
Verwenden Sie immer FileProvider für den Austausch von Dateien zwischen Anwendungen auf Android N und höher.