bytes.cat

La wiki d'FP d'informàtica

Eines de l'usuari

Eines del lloc


Barra lateral

ASIX Administració de Sistemes Informàtics i Xarxes
Tots els mòduls del cicle
MP01 Implantació de sistemes operatius
Totes les UFs del modul
MP02 Gestió de bases de dades
Totes les UFs del modul
MP03 Programació bàsica
Totes les UFs del modul
MP04 Llenguatges de marques i sistemes de gestió d'informació
Totes les UFs del modul
MP05 Fonaments de maquinari
Totes les UFs del modul
MP06 Administració de sistemes operatius
Totes les UFs del modul
MP07 Planificació i administració de xarxes
Totes les UFs del modul
MP08 Serveis de xarxa i Internet
Totes les UFs del modul
MP09 Implantació d'aplicacions web
Totes les UFs del modul
MP10 Administració de sistemes gestors de bases de dades
Totes les UFs del modul
MP11 Seguretat i alta disponibilitat
Totes les UFs del modul
MP12 Formació i orientació laboral
Totes les UFs del modul
MP13 Empresa i iniciativa emprenedora
Totes les UFs del modul
MP14 Projecte
Totes les UFs del modul
DAM Desenvolupament d’aplicacions multiplataforma
Tots els mòduls del cicle
MP01 Sistemes informàtics
Totes les UFs del modul
MP02 Bases de dades
Totes les UFs del modul
MP03 Programació bàsica
Totes les UFs del modul
MP04 Llenguatges de marques i sistemes de gestió d'informació
Totes les UFs del modul
MP05 Entorns de desenvolupament
Totes les UFs del modul
MP06 Accés a dades
Totes les UFs del modul
MP07 Desenvolupament d’interfícies
Totes les UFs del modul
MP08 Programació multimèdia i dispositius mòbils
Totes les UFs del modul
MP09 Programació de serveis i processos
Totes les UFs del modul
MP10 Sistemes de gestió empresarial
Totes les UFs del modul
MP11 Formació i orientació laboral
Totes les UFs del modul
MP12 Empresa i iniciativa emprenedora
Totes les UFs del modul
MP13 Projecte de síntesi
Totes les UFs del modul
MPDual Mòdul Dual / Projecte
DAW Desenvolupament d’aplicacions web
Tots els mòduls del cicle
MP01 Sistemes informàtics
Totes les UFs del modul
MP02 Bases de dades
Totes les UFs del modul
MP03 Programació
Totes les UFs del modul
MP04 Llenguatge de marques i sistemes de gestió d’informació
Totes les UFs del modul
MP05 Entorns de desenvolupament
Totes les UFs del modul
MP06 Desenvolupament web en entorn client
Totes les UFs del modul
MP07 Desenvolupament web en entorn servidor
Totes les UFs del modul
MP08 Desplegament d'aplicacions web
Totes les UFs del modul
MP09 Disseny d'interfícies web
Totes les UFs del modul
MP10 Formació i Orientació Laboral
Totes les UFs del modul
MP11 Empresa i iniciativa emprenedora
Totes les UFs del modul
MP12 Projecte de síntesi
Totes les UFs del modul
SMX Sistemes Microinformàtics i Xarxes
Tots els mòduls del cicle
MP01 Muntatge i manteniment d’equips
Totes les UFs del modul
MP02 Sistemes Operatius Monolloc
Totes les UFs del modul
MP03 Aplicacions ofimàtiques
Totes les UFs del modul
MP04 Sistemes operatius en xarxa
Totes les UFs del modul
MP05 Xarxes locals
Totes les UFs del modul
MP06 Seguretat informàtica
Totes les UFs del modul
MP07 Serveis de xarxa
Totes les UFs del modul
MP08 Aplicacions Web
Totes les UFs del modul
MP09 Formació i Orientació Laboral
Totes les UFs del modul
MP10 Empresa i iniciativa emprenedora
Totes les UFs del modul
MP11 Anglès
Totes les UFs del modul
MP12 Síntesi
Totes les UFs del modul
CETI Ciberseguretat en Entorns de les Tecnologies de la Informació
Tots els mòduls del cicle
CiberOT Ciberseguretat en Entorns d'Operació
Tots els mòduls del cicle
android_galeria

Aquesta és una revisió antiga del document


Media Gallery en Android

Farem una aplicació per accedir als arxius multimèdia del dispositiu, una foto en aquest cas, i mostrar-la dins la nostra app en un ImageView.

L'accés a la galeria multimèdia haurà de demanar permisos per accedir als arxius compartits. Inicialment es feia amb permisos estàtics a l'AndroidManifest.xml però des de Android 6+ (API 23+) es fa amb permisos dinàmics dins el nostre codi per accedir la galeria de fotos compartida.


Passes prèvies

Necessitem algunes fotos dins el dispositiu de l'emulador quan treballem amb Android Studio. Ves a l'aplicació de fotos i fes algunes perquè el carret de la càmera tingui alguns exemples.

Per simular la captura de fotos podem ajustar les càmeres frontal i interna amb diverses opcions:

  • Virtual Scene: escena 3D (l'habitació amb el gat, el gos, la TV i la cuina). Ets pots moure dins l'estança i apuntar en diferents llocs.
  • Emulated: un dibuix ultrapixelat molt bàsic.
  • Webcam: enllaç a la càmera real del dispositiu (si estàs en un PC, la webcam).

IMPORTANT:

Haurem de crear un Button i un ImageView al layout de activity_main.xml.


Codi curt

Mireu el codi "Launch an Activity for result" de la documentació oficial d'Android. És així de curt perquè hi ha moltes coses implícites com deixar que el sistema operatiu demani els permisos a l'usuari

Caldrà afegir l'acció de la callback on diu «Handle the returned Uri», i aplicar la imatge que ens arriba en forma de Uri al ImageView que tinguem.


Codi llarg

Qui vol un codi llarg? Doncs per quan volem particularitzar coses més explícites.

O perquè no he ssabut trobar el codi curt abans ;)

Codi llarg per a accés a la Galeria d'Imatges
Cal declarar els permisos adequats al AndroidManifest.xml:
<uses-permission android:name="android.permission.READ_MEDIA_IMAGES" />

El codi de MainActivity:

MainActivity.kt
package com.enric.galeria
 
// imports...
 
class MainActivity : AppCompatActivity() {
 
    private lateinit var imageView: ImageView
    private lateinit var btnSelectImage: Button
 
    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_main)
 
        // Inicializar vistas
        imageView = findViewById(R.id.imageView)
        btnSelectImage = findViewById(R.id.button)
 
        // Configurar botó
        btnSelectImage.setOnClickListener {
            checkAndRequestPermission()
        }
    }
 
    // Permís necessari per a Android 13+ (API 33+)
    private val requestPermissionLauncher = registerForActivityResult(
        ActivityResultContracts.RequestPermission()
    ) { isGranted: Boolean ->
        if (isGranted) {
            openGallery()
        } else {
            Toast.makeText(
                this, "Permís denegat. No pots seleccionar imatges.",
                Toast.LENGTH_SHORT ).show()
        }
    }
 
    // Obrir galeria i obtenir resultat
    private val galleryLauncher = registerForActivityResult(
        ActivityResultContracts.StartActivityForResult()
    ) { result ->
        if (result.resultCode == Activity.RESULT_OK) {
            val data: Intent? = result.data
            val selectedImageUri: Uri? = data?.data
 
            if (selectedImageUri != null) {
                // Mostrar imatge seleccionada
                imageView.setImageURI(selectedImageUri)
            } else {
                Toast.makeText(
                    this, "No s'ha pogut carregar la imatge.",
                    Toast.LENGTH_SHORT).show()
            }
        }
    }
 
    private fun checkAndRequestPermission() {
        // Aquesta línia ens obliga a indicar permisos al AndroidManifest.xml
        val permission = android.Manifest.permission.READ_MEDIA_IMAGES
 
        if (ContextCompat.checkSelfPermission(
            this,permission) == PackageManager.PERMISSION_GRANTED)
        {
            // Permís ja concedit
            openGallery()
        } else {
            // Sol·licitar permís
            requestPermissionLauncher.launch(permission)
        }
    }
 
    private fun openGallery() {
        val intent = Intent(Intent.ACTION_GET_CONTENT).apply {
            type = "image/*"
            addCategory(Intent.CATEGORY_OPENABLE)
        }
 
        galleryLauncher.launch(intent)
    }
 
}
android_galeria.1764762536.txt.gz · Darrera modificació: 2025/12/03 11:48 per enric_mieza_sanchez