Sobes.tech
Middle

Ako by ste odovzdali fotografiu do editora?

sobes.tech AI

Odpoveď od AI

Existuje niekoľko spôsobov:

  1. Použitie URI súboru: Toto je najbežnejší a najefektívnejší spôsob pre veľké súbory, ako sú fotografie.

    • Vytvoríme URI pre súbor obrázka.
    • Pošleme tento URI cieľovej Activity pomocou Intentu.
    // Vytvoríme URI zo súboru
    val imageFile = File(filesDir, "my_photo.jpg")
    val imageUri = FileProvider.getUriForFile(this, "${packageName}.provider", imageFile)
    
    // Vytvoríme Intent a pridáme URI
    val editIntent = Intent(Intent.ACTION_EDIT)
    editIntent.setDataAndType(imageUri, "image/*")
    editIntent.addFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION) // Dôležité pre prístup k URI
    
    // Spustíme Activity
    startActivity(editIntent)
    
  2. Prenos Bitmapu cez Intent: Vhodné pre malé obrázky alebo náhľady. Bitmap sa serializuje, čo môže viesť k chybám TransactionTooLargeException pri veľkom rozmere.

    // Získame Bitmap
    val bitmap: Bitmap = ... // Váš Bitmap
    
    // Vytvoríme Intent a pridáme Bitmap
    val editIntent = Intent(this, EditorActivity::class.java)
    editIntent.putExtra("image_bitmap", bitmap) // Bitmap sa serializuje
    
    // Spustíme Activity
    startActivity(editIntent)
    

    V cieľovej Activity:

    val bitmap = intent.getParcelableExtra<Bitmap>("image_bitmap")
    // Používame bitmap
    
  3. Uloženie do spoločného cache a odovzdanie mena súboru: Používa sa na dočasný prístup k súboru iným aplikáciám.

    • Uložíme súbor do dočasného priečinka dostupného iným aplikáciám (napríklad cache adresár špecifický pre aplikáciu).
    • Pošleme cestu k súboru cez Intent.
    • Cieľová aplikácia musí mať práva na čítanie z tohto priečinka.
    // Uložíme súbor do dočasného adresára
    val tempFile = File(cacheDir, "temp_photo.jpg")
    // Zapíšeme dáta fotografie do tempFile
    
    // Vytvoríme Intent a odovzdáme cestu k súboru
    val editIntent = Intent(this, EditorActivity::class.java)
    editIntent.putExtra("image_path", tempFile.absolutePath)
    
    // Spustíme Activity
    startActivity(editIntent)
    

    V cieľovej Activity:

    val imagePath = intent.getStringExtra("image_path")
    val imageFile = File(imagePath)
    // Čítame dáta z imageFile
    

Výber metódy závisí od veľkosti fotografie a požiadaviek na výmenu údajov medzi Activity. Pre veľké obrázky je URI cez FileProvider preferovanou možnosťou.