Sobes.tech
Middle

Jak byste předali fotografii do editoru?

sobes.tech AI

Odpověď od AI

Existuje několik způsobů:

  1. Použití URI souboru: To je nejběžnější a nejefektivnější způsob pro velké soubory, jako jsou fotografie.

    • Vytvořte URI pro soubor s obrázkem.
    • Přeneste tento URI do cílové Activity pomocí Intent.
    // Vytvoření URI ze souboru
    val imageFile = File(filesDir, "my_photo.jpg")
    val imageUri = FileProvider.getUriForFile(this, "${packageName}.provider", imageFile)
    
    // Vytvoření Intent a přidání URI
    val editIntent = Intent(Intent.ACTION_EDIT)
    editIntent.setDataAndType(imageUri, "image/*")
    editIntent.addFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION) // Důležité pro přístup k URI
    
    // Spuštění Activity
    startActivity(editIntent)
    
  2. Přenos Bitmap přes Intent: Vhodné pro malé obrázky nebo náhledy. Bitmap se serializuje, což může způsobit chyby TransactionTooLargeException u velkých rozměrů.

    // Získání Bitmapu
    val bitmap: Bitmap = ... // Váš Bitmap
    
    // Vytvoření Intent a přidání Bitmapu
    val editIntent = Intent(this, EditorActivity::class.java)
    editIntent.putExtra("image_bitmap", bitmap) // Bitmap se serializuje
    
    // Spuštění Activity
    startActivity(editIntent)
    

    V cílové Activity:

    val bitmap = intent.getParcelableExtra<Bitmap>("image_bitmap")
    // Použití bitmapu
    
  3. Uložení do sdílené cache a předání názvu souboru: Používá se pro dočasný přístup k souboru jiným aplikacím.

    • Uložíme soubor do dočasné složky, která je přístupná jiným aplikacím (například, specifický cache adresář aplikace).
    • Předáme cestu k souboru přes Intent.
    • Cílová aplikace musí mít práva ke čtení z této složky.
    // Uložení souboru do dočasného adresáře
    val tempFile = File(cacheDir, "temp_photo.jpg")
    // Zápis dat fotografie do tempFile
    
    // Vytvoření Intent a předání cesty k souboru
    val editIntent = Intent(this, EditorActivity::class.java)
    editIntent.putExtra("image_path", tempFile.absolutePath)
    
    // Spuštění Activity
    startActivity(editIntent)
    

    V cílové Activity:

    val imagePath = intent.getStringExtra("image_path")
    val imageFile = File(imagePath)
    // Čtení dat z imageFile
    

Volba metody závisí na velikosti fotografie a požadavcích na výměnu dat mezi Activity. Pro velké obrázky je URI přes FileProvider preferovanou volbou.