Sobes.tech
Middle

Como transferiria uma fotografia para um editor?

sobes.tech IA

Resposta da IA

Existem várias formas:

  1. Uso de URI de ficheiro: É a forma mais comum e eficiente para ficheiros grandes, como fotografias.

    • Criar um URI para o ficheiro de imagem.
    • Transmitir esse URI para a Activity de destino através de um Intent.
    // Criar um URI a partir de um Ficheiro
    val imageFile = File(filesDir, "my_photo.jpg")
    val imageUri = FileProvider.getUriForFile(this, "${packageName}.provider", imageFile)
    
    // Criar um Intent e adicionar o URI
    val editIntent = Intent(Intent.ACTION_EDIT)
    editIntent.setDataAndType(imageUri, "image/*")
    editIntent.addFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION) // Importante para aceder ao URI
    
    // Iniciar a Activity
    startActivity(editIntent)
    
  2. Transmissão de Bitmap via Intent: Adequado para imagens pequenas ou pré-visualizações. O Bitmap é serializado, o que pode causar erros TransactionTooLargeException se for muito grande.

    // Obter o Bitmap
    val bitmap: Bitmap = ... // O seu Bitmap
    
    // Criar um Intent e adicionar o Bitmap
    val editIntent = Intent(this, EditorActivity::class.java)
    editIntent.putExtra("image_bitmap", bitmap) // Bitmap serializado
    
    // Iniciar a Activity
    startActivity(editIntent)
    

    Na Activity de destino:

    val bitmap = intent.getParcelableExtra<Bitmap>("image_bitmap")
    // Utilizar o bitmap
    
  3. Guardar na cache comum e passar o nome do ficheiro: Usado para acesso temporário ao ficheiro por outras aplicações.

    • Guardar o ficheiro numa pasta temporária acessível a outras aplicações (por exemplo, diretório de cache específico da aplicação).
    • Passar o caminho do ficheiro através de um Intent.
    • A aplicação de destino deve ter permissões para ler dessa pasta.
    // Guardar o ficheiro no diretório temporário
    val tempFile = File(cacheDir, "temp_photo.jpg")
    // Escrever os dados da fotografia em tempFile
    
    // Criar um Intent e passar o caminho do ficheiro
    val editIntent = Intent(this, EditorActivity::class.java)
    editIntent.putExtra("image_path", tempFile.absolutePath)
    
    // Iniciar a Activity
    startActivity(editIntent)
    

    Na Activity de destino:

    val imagePath = intent.getStringExtra("image_path")
    val imageFile = File(imagePath)
    // Ler os dados de imageFile
    

A escolha do método depende do tamanho da fotografia e dos requisitos de troca de dados entre Activities. Para imagens grandes, URI via FileProvider é a opção preferida.