Sobes.tech
Middle

Hoe zou je een foto naar een editor overbrengen?

sobes.tech AI

Antwoord van AI

Er zijn verschillende manieren:

  1. Gebruik van URI van bestand: Dit is de meest gebruikelijke en efficiënte manier voor grote bestanden, zoals foto's.

    • Maak een URI voor het afbeeldingsbestand.
    • Geef deze URI door aan de doel-Activity via een Intent.
    // Maak een URI van een bestand
    val imageFile = File(filesDir, "my_photo.jpg")
    val imageUri = FileProvider.getUriForFile(this, "${packageName}.provider", imageFile)
    
    // Maak een Intent en voeg de URI toe
    val editIntent = Intent(Intent.ACTION_EDIT)
    editIntent.setDataAndType(imageUri, "image/*")
    editIntent.addFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION) // Belangrijk voor toegang tot URI
    
    // Start de Activity
    startActivity(editIntent)
    
  2. Overdracht van Bitmap via Intent: Geschikt voor kleine afbeeldingen of previews. Bitmap wordt geserialiseerd, wat kan leiden tot TransactionTooLargeException bij grote afmetingen.

    // Verkrijg Bitmap
    val bitmap: Bitmap = ... // Jouw Bitmap
    
    // Maak een Intent en voeg de Bitmap toe
    val editIntent = Intent(this, EditorActivity::class.java)
    editIntent.putExtra("image_bitmap", bitmap) // Bitmap wordt geserialiseerd
    
    // Start de Activity
    startActivity(editIntent)
    

    In de doel-Activity:

    val bitmap = intent.getParcelableExtra<Bitmap>("image_bitmap")
    // Gebruik de bitmap
    
  3. Opslaan in gedeelde cache en bestandsnaam doorgeven: Wordt gebruikt voor tijdelijke toegang tot het bestand door andere apps.

    • Sla het bestand op in een tijdelijke map die toegankelijk is voor andere apps (bijvoorbeeld, app-specifieke cache directory).
    • Geef het pad naar het bestand door via een Intent.
    • De doelapp moet leesrechten hebben voor deze map.
    // Sla het bestand op in een tijdelijke directory
    val tempFile = File(cacheDir, "temp_photo.jpg")
    // Schrijf de foto-gegevens naar tempFile
    
    // Maak een Intent en geef het pad door
    val editIntent = Intent(this, EditorActivity::class.java)
    editIntent.putExtra("image_path", tempFile.absolutePath)
    
    // Start de Activity
    startActivity(editIntent)
    

    In de doel-Activity:

    val imagePath = intent.getStringExtra("image_path")
    val imageFile = File(imagePath)
    // Lees gegevens uit imageFile
    

De keuze van methode hangt af van de grootte van de foto en de vereisten voor gegevensuitwisseling tussen Activities. Voor grote afbeeldingen is URI via FileProvider de voorkeursoptie.