Sobes.tech
Middle

Jak byś przesłał zdjęcie do edytora?

sobes.tech AI

Odpowiedź od AI

Istnieje kilka sposobów:

  1. Użycie URI pliku: To najpowszechniejszy i najskuteczniejszy sposób dla dużych plików, takich jak zdjęcia.

    • Tworzymy URI dla pliku obrazu.
    • Przesyłamy ten URI do docelowej Activity za pomocą Intent.
    // Tworzymy URI z pliku
    val imageFile = File(filesDir, "my_photo.jpg")
    val imageUri = FileProvider.getUriForFile(this, "${packageName}.provider", imageFile)
    
    // Tworzymy Intent i dodajemy URI
    val editIntent = Intent(Intent.ACTION_EDIT)
    editIntent.setDataAndType(imageUri, "image/*")
    editIntent.addFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION) // Ważne dla dostępu do URI
    
    // Uruchamiamy Activity
    startActivity(editIntent)
    
  2. Przesyłanie Bitmapy przez Intent: Odpowiednie dla małych obrazów lub podglądów. Bitmapa jest serializowana, co może powodować błędy TransactionTooLargeException przy dużych rozmiarach.

    // Uzyskujemy Bitmapę
    val bitmap: Bitmap = ... // Twoja Bitmapa
    
    // Tworzymy Intent i dodajemy Bitmapę
    val editIntent = Intent(this, EditorActivity::class.java)
    editIntent.putExtra("image_bitmap", bitmap) // Bitmapa jest serializowana
    
    // Uruchamiamy Activity
    startActivity(editIntent)
    

    W docelowej Activity:

    val bitmap = intent.getParcelableExtra<Bitmap>("image_bitmap")
    // Używamy bitmapy
    
  3. Zapisywanie w wspólnym cache i przekazywanie nazwy pliku: Używane do tymczasowego dostępu do pliku przez inne aplikacje.

    • Zapisujemy plik w tymczasowym folderze dostępnym dla innych aplikacji (np. katalog cache specyficzny dla aplikacji).
    • Przekazujemy ścieżkę do pliku za pomocą Intent.
    • Docelowa aplikacja musi mieć uprawnienia do odczytu z tego folderu.
    // Zapisujemy plik w folderze tymczasowym
    val tempFile = File(cacheDir, "temp_photo.jpg")
    // Zapisujemy dane zdjęcia do tempFile
    
    // Tworzymy Intent i przekazujemy ścieżkę do pliku
    val editIntent = Intent(this, EditorActivity::class.java)
    editIntent.putExtra("image_path", tempFile.absolutePath)
    
    // Uruchamiamy Activity
    startActivity(editIntent)
    

    W docelowej Activity:

    val imagePath = intent.getStringExtra("image_path")
    val imageFile = File(imagePath)
    // Odczytujemy dane z imageFile
    

Wybór metody zależy od rozmiaru zdjęcia i wymagań dotyczących wymiany danych między Activity. Dla dużych obrazów preferowany jest URI przez FileProvider.