Middle
Jak byś przesłał zdjęcie do edytora?
sobes.tech AI
Odpowiedź od AI
Istnieje kilka sposobów:
-
Użycie URI pliku: To najpowszechniejszy i najskuteczniejszy sposób dla dużych plików, takich jak zdjęcia.
- Tworzymy URI dla pliku obrazu.
- Przesyłamy ten URI do docelowej Activity za pomocą Intent.
// Tworzymy URI z pliku val imageFile = File(filesDir, "my_photo.jpg") val imageUri = FileProvider.getUriForFile(this, "${packageName}.provider", imageFile) // Tworzymy Intent i dodajemy URI val editIntent = Intent(Intent.ACTION_EDIT) editIntent.setDataAndType(imageUri, "image/*") editIntent.addFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION) // Ważne dla dostępu do URI // Uruchamiamy Activity startActivity(editIntent) -
Przesyłanie Bitmapy przez Intent: Odpowiednie dla małych obrazów lub podglądów. Bitmapa jest serializowana, co może powodować błędy
TransactionTooLargeExceptionprzy dużych rozmiarach.// Uzyskujemy Bitmapę val bitmap: Bitmap = ... // Twoja Bitmapa // Tworzymy Intent i dodajemy Bitmapę val editIntent = Intent(this, EditorActivity::class.java) editIntent.putExtra("image_bitmap", bitmap) // Bitmapa jest serializowana // Uruchamiamy Activity startActivity(editIntent)W docelowej Activity:
val bitmap = intent.getParcelableExtra<Bitmap>("image_bitmap") // Używamy bitmapy -
Zapisywanie w wspólnym cache i przekazywanie nazwy pliku: Używane do tymczasowego dostępu do pliku przez inne aplikacje.
- Zapisujemy plik w tymczasowym folderze dostępnym dla innych aplikacji (np. katalog cache specyficzny dla aplikacji).
- Przekazujemy ścieżkę do pliku za pomocą Intent.
- Docelowa aplikacja musi mieć uprawnienia do odczytu z tego folderu.
// Zapisujemy plik w folderze tymczasowym val tempFile = File(cacheDir, "temp_photo.jpg") // Zapisujemy dane zdjęcia do tempFile // Tworzymy Intent i przekazujemy ścieżkę do pliku val editIntent = Intent(this, EditorActivity::class.java) editIntent.putExtra("image_path", tempFile.absolutePath) // Uruchamiamy Activity startActivity(editIntent)W docelowej Activity:
val imagePath = intent.getStringExtra("image_path") val imageFile = File(imagePath) // Odczytujemy dane z imageFile
Wybór metody zależy od rozmiaru zdjęcia i wymagań dotyczących wymiany danych między Activity. Dla dużych obrazów preferowany jest URI przez FileProvider.