Sobes.tech
Middle

Kaip perduotumėte nuotrauką į redaktorių?

sobes.tech AI

Atsakymas iš AI

Yra keletas būdų:

  1. 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)
    
  2. Perduoti Bitmap per Intent: Tinka mažiems vaizdams arba peržiūroms. Bitmap serializuojamas, kas gali sukelti klaidų TransactionTooLargeException didelių 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
    
  3. 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.