Middle
Wie würden Sie ein Foto in einen Editor übertragen?
sobes.tech KI
Antwort von AI
Es gibt mehrere Möglichkeiten:
-
Verwendung von URI einer Datei: Dies ist die gebräuchlichste und effizienteste Methode für große Dateien wie Fotos.
- Erstellen Sie eine URI für die Bilddatei.
- Übergeben Sie diese URI an die Ziel-Activity mittels Intent.
// Erstellen Sie eine URI aus einer Datei val imageFile = File(filesDir, "my_photo.jpg") val imageUri = FileProvider.getUriForFile(this, "${packageName}.provider", imageFile) // Erstellen Sie ein Intent und fügen Sie die URI hinzu val editIntent = Intent(Intent.ACTION_EDIT) editIntent.setDataAndType(imageUri, "image/*") editIntent.addFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION) // Wichtig für den Zugriff auf die URI // Starten Sie die Activity startActivity(editIntent) -
Übertragung von Bitmap über Intent: Geeignet für kleine Bilder oder Vorschaubilder. Das Bitmap wird serialisiert, was bei großen Größen zu Fehlern
TransactionTooLargeExceptionführen kann.// Bitmap erhalten val bitmap: Bitmap = ... // Ihr Bitmap // Erstellen Sie ein Intent und fügen Sie das Bitmap hinzu val editIntent = Intent(this, EditorActivity::class.java) editIntent.putExtra("image_bitmap", bitmap) // Bitmap wird serialisiert // Starten Sie die Activity startActivity(editIntent)In der Ziel-Activity:
val bitmap = intent.getParcelableExtra<Bitmap>("image_bitmap") // Verwenden Sie das Bitmap -
Speicherung im gemeinsamen Cache und Übergabe des Dateinamens: Wird für temporären Zugriff auf die Datei durch andere Anwendungen verwendet.
- Speichern Sie die Datei in einem temporären Ordner, der für andere Anwendungen zugänglich ist (z.B. anwendungsspezifisches Cache-Verzeichnis).
- Übergeben Sie den Pfad zur Datei über ein Intent.
- Die Zielanwendung muss Leserechte für diesen Ordner haben.
// Datei im temporären Verzeichnis speichern val tempFile = File(cacheDir, "temp_photo.jpg") // Schreiben Sie die Bilddaten in tempFile // Erstellen Sie ein Intent und übergeben Sie den Pfad val editIntent = Intent(this, EditorActivity::class.java) editIntent.putExtra("image_path", tempFile.absolutePath) // Starten Sie die Activity startActivity(editIntent)In der Ziel-Activity:
val imagePath = intent.getStringExtra("image_path") val imageFile = File(imagePath) // Lesen Sie die Daten aus imageFile
Die Wahl der Methode hängt von der Größe des Fotos und den Anforderungen an den Datenaustausch zwischen Activities ab. Für große Bilder ist URI über FileProvider die bevorzugte Option.