Middle
Kaip perduotumėte nuotrauką į redaktorių?
sobes.tech AI
Atsakymas iš AI
Yra keletas būdų:
-
Naudoti failo URI: Tai yra dažniausiai naudojamas ir efektyviausias būdas dideliems failams, pvz., nuotraukoms.
- Sukuriame URI nuotraukos failui.
- Siunčiame šį URI tikslinės Activity naudojant Intent.
// Sukuriame URI iš Failo val imageFile = File(filesDir, "my_photo.jpg") val imageUri = FileProvider.getUriForFile(this, "${packageName}.provider", imageFile) // Sukuriame Intent ir pridedame URI val editIntent = Intent(Intent.ACTION_EDIT) editIntent.setDataAndType(imageUri, "image/*") editIntent.addFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION) // Svarbu prieigos teisei prie URI // Paleidžiame Activity startActivity(editIntent) -
Perduoti Bitmap per Intent: Tinka mažiems vaizdams arba peržiūroms. Bitmap serializuojamas, kas gali sukelti klaidų
TransactionTooLargeExceptiondidelių dydžių atvejais.// Gauname Bitmap val bitmap: Bitmap = ... // Jūsų Bitmap // Sukuriame Intent ir pridedame Bitmap val editIntent = Intent(this, EditorActivity::class.java) editIntent.putExtra("image_bitmap", bitmap) // Bitmap serializuojamas // Paleidžiame Activity startActivity(editIntent)Tikslinėje Activity:
val bitmap = intent.getParcelableExtra<Bitmap>("image_bitmap") // Naudojame bitmap -
Laikymas bendrame cache ir failo pavadinimo perdavimas: Naudojama laikiniems failo prieigos poreikiams kitoms programoms.
- Išsaugome failą laikinoje aplanke, prieinamoje kitoms programoms (pvz., programos specifiniame cache kataloge).
- Perduodame failo kelią per Intent.
- Tikslinė programa turi turėti teises skaityti iš šio katalogo.
// Išsaugome failą laikinoje kataloge val tempFile = File(cacheDir, "temp_photo.jpg") // Rašome nuotraukos duomenis į tempFile // Sukuriame Intent ir perduodame failo kelią val editIntent = Intent(this, EditorActivity::class.java) editIntent.putExtra("image_path", tempFile.absolutePath) // Paleidžiame Activity startActivity(editIntent)Tikslinėje Activity:
val imagePath = intent.getStringExtra("image_path") val imageFile = File(imagePath) // Skaitome duomenis iš imageFile
Pasirinkimas priklauso nuo nuotraukos dydžio ir duomenų mainų tarp Activity reikalavimų. Dideliems vaizdams URI per FileProvider yra pageidautinas variantas.