Ací es mostren les diferències entre la revisió seleccionada i la versió actual de la pàgina.
| Ambdós costats versió prèvia Revisió prèvia Següent revisió | Revisió prèvia | ||
|
android_multimedia [2025/12/04 15:07] enric_mieza_sanchez [Exercicis] |
android_multimedia [2025/12/10 20:16] (actual) enric_mieza_sanchez [Exercicis] |
||
|---|---|---|---|
| Línia 2: | Línia 2: | ||
| Per multimèdia s' | Per multimèdia s' | ||
| + | |||
| + | {{ android: | ||
| Tot el relacionat amb sensors és susceptible d' | Tot el relacionat amb sensors és susceptible d' | ||
| Línia 66: | Línia 68: | ||
| <WRAP todo> | <WRAP todo> | ||
| - | **Captura de imatge amb la càmera (versió //thubnail//)** | + | **Captura de imatge |
| El mateix mecanisme que heu emprat per demanar la càrrega d' | El mateix mecanisme que heu emprat per demanar la càrrega d' | ||
| Línia 73: | Línia 75: | ||
| Afegeix un botó a l' | Afegeix un botó a l' | ||
| + | </ | ||
| + | |||
| + | \\ | ||
| + | |||
| + | ===== Foto full-size i FileProvider : donant accés a l' | ||
| + | |||
| + | Demanar una miniatura (// | ||
| + | |||
| + | Un mètode força segur per a fer la foto en alta resolució és obrir els permisos temporalment d'un arxiu privat de l' | ||
| + | |||
| + | {{ android: | ||
| + | |||
| + | Per a realitzar la foto // | ||
| + | - Afegir un arxiu '' | ||
| + | - Declarar el '' | ||
| + | - Al codi de l''' | ||
| + | - Engegar l'App Camera amb la '' | ||
| + | |||
| + | |||
| + | ==== Arxius XML ==== | ||
| + | |||
| + | <code xml res/ | ||
| + | <?xml version=" | ||
| + | <paths xmlns: | ||
| + | < | ||
| + | <!-- si volguessim una carpeta de l' | ||
| + | </ | ||
| + | </ | ||
| + | |||
| + | |||
| + | <code xml AndroidManifest.xml> | ||
| + | < | ||
| + | |||
| + | < | ||
| + | android: | ||
| + | android: | ||
| + | android: | ||
| + | android: | ||
| + | < | ||
| + | android: | ||
| + | android: | ||
| + | </ | ||
| + | </ | ||
| + | </ | ||
| + | |||
| + | ==== Codi MainActivity.kt ==== | ||
| + | |||
| + | Preparació del recurs compartit i inici de l'App Camera: | ||
| + | |||
| + | <code kotlin MainActivity.kt> | ||
| + | val photoButton = findViewById< | ||
| + | photoButton.setOnClickListener { | ||
| + | // Assegurem que existeix la carpeta de fotos (igual que al FileProvider) | ||
| + | val carpeta = File(filesDir.toString()," | ||
| + | carpeta.mkdirs() | ||
| + | | ||
| + | // Preparem l' | ||
| + | val file = File(filesDir.toString()," | ||
| + | fotoUri = FileProvider.getUriForFile(this, | ||
| + | " | ||
| + | | ||
| + | // engeguem l'App Camera | ||
| + | takeFullPic.launch(fotoUri) | ||
| + | } | ||
| + | </ | ||
| + | |||
| + | I la // | ||
| + | |||
| + | <code kotlin MainActivity.kt> | ||
| + | val takeFullPic = registerForActivityResult( | ||
| + | ActivityResultContracts.TakePicture()) { success -> | ||
| + | if (success) { | ||
| + | // netejar imatge i pintar nova | ||
| + | imageView.setImageDrawable(null) | ||
| + | imageView.setImageURI(fotoUri) | ||
| + | } else { | ||
| + | // notifiquem error | ||
| + | Toast.makeText(this, | ||
| + | } | ||
| + | } | ||
| + | </ | ||
| + | |||
| + | \\ | ||
| + | |||
| + | ===== Àrea privada i àrea compartida ===== | ||
| + | |||
| + | L' | ||
| + | |||
| + | L' | ||
| + | * Pictures | ||
| + | * Music | ||
| + | * Movies | ||
| + | * **Android/ | ||
| + | |||
| + | On '' | ||
| + | |||
| + | Els directoris on s' | ||
| + | |||
| + | ^ ^ Funció d' | ||
| + | | Arxius privats de l' | ||
| + | | Arxius compartits de l'app | getExternalFilesDir( null ) | / | ||
| + | | Arxius compartits de fotos | Environment.getExternalStoragePublicDirectory( Environment.DIRECTORY_PICTURES ) | / | ||
| + | |||
| + | |||
| + | \\ | ||
| + | |||
| + | ==== Àrea compartida d' | ||
| + | |||
| + | Si volem fer servir l' | ||
| + | |||
| + | Al '' | ||
| + | <code xml file_paths.xml> | ||
| + | < | ||
| + | </ | ||
| + | |||
| + | A '' | ||
| + | <code kotlin MainActivity.kt> | ||
| + | val carpeta = File(getExternalFilesDir(null).toString()," | ||
| + | ... | ||
| + | val file = File(getExternalFilesDir(null).toString()," | ||
| + | </ | ||
| + | |||
| + | Utilitzeu el **Device Explorer** del Android Studio per visualitzar les carpetes i arxius. | ||
| + | |||
| + | \\ | ||
| + | |||
| + | ==== Carpetes compartides generals públiques ==== | ||
| + | |||
| + | Si volem fer servir l' | ||
| + | |||
| + | Al '' | ||
| + | <code xml file_paths.xml> | ||
| + | < | ||
| + | </ | ||
| + | |||
| + | A '' | ||
| + | Environment.DIRECTORY_PICTURES))'' | ||
| + | <code kotlin MainActivity.kt> | ||
| + | val carpeta = File(Environment.getExternalStoragePublicDirectory( | ||
| + | Environment.DIRECTORY_PICTURES).toString()," | ||
| + | ... | ||
| + | val file = File(Environment.getExternalStoragePublicDirectory( | ||
| + | Environment.DIRECTORY_PICTURES).toString()," | ||
| + | </ | ||
| + | |||
| + | \\ | ||
| + | |||
| + | ===== Exercicis ===== | ||
| + | |||
| + | <WRAP todo> | ||
| + | **Captura de fotos // | ||
| + | |||
| + | Implementa la captura de fotos // | ||
| + | </ | ||
| + | |||
| + | <WRAP todo> | ||
| + | **Exercici MyGallery** | ||
| + | |||
| + | Implementa una app de captura de fotos i conserva tots els arxius amb un nom que eviti col·lisions, | ||
| + | |||
| + | Visualització les fotos que anem prenent en l' | ||
| + | |||
| </ | </ | ||