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/10 11:19] 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 85: | Línia 87: | ||
| {{ android: | {{ android: | ||
| - | Així, els passos que cal fer son: | + | Per a realitzar la foto // |
| - | - Crear un '' | + | - Afegir |
| - | - Definir els directoris a un arxiu de Recursos (res) '' | + | - Declarar el '' |
| - | - Crear un arxiu temporal amb l'objecte | + | - Al codi de l''' |
| - | - Utilitza també les funcions d'emmagatzematge intern o extern (< | + | - Engegar l'App Camera amb la '' |
| - | - Transforma | + | |
| - | - Llançar el '' | + | |
| - | // creem arxiu on volem guardar | + | |
| - | String filePath = getExternalFilesDir(Environment.DIRECTORY_PICTURES | + | |
| - | ).toString() + "/tmpImg.jpg"; | + | |
| - | File photoFile = new File( filePath ); | + | |
| - | | + | |
| - | | + | |
| - | // igual que la que heu d' | + | |
| - | photoURI = FileProvider.getUriForFile(MainActivity.this, | + | |
| - | " | + | |
| - | photoFile); | + | |
| - | | + | |
| - | | + | ==== Arxius XML ==== |
| - | // Afegir arxiu amb permisos del FileProvider al Intent | + | |
| - | intent.putExtra(MediaStore.EXTRA_OUTPUT, | + | <code xml res/xml/file_paths.xml> |
| - | | + | <?xml version="1.0" encoding=" |
| + | <paths xmlns: | ||
| + | | ||
| + | <!-- si volguessim una carpeta de l' | ||
| + | </ | ||
| </ | </ | ||
| - | - Quan rebem el resultat a la callback '' | ||
| - | @Override | ||
| - | public void onActivityResult(ActivityResult result) { | ||
| - | if (result.getResultCode() == AppCompatActivity.RESULT_OK) { | ||
| - | // display foto | ||
| - | ImageView imageView = findViewById(R.id.imageView); | ||
| - | Intent data = result.getData(); | ||
| - | Bundle extras = data.getExtras(); | ||
| - | // si ve un bitmap, pinto el bitmap | ||
| - | if( extras!=null ) { | ||
| - | Bitmap imageBitmap = (Bitmap) extras.get(" | ||
| - | imageView.setImageBitmap(imageBitmap); | ||
| - | return; | ||
| - | } else { | ||
| - | // si no em retorna res, agafo la photoURI | ||
| - | // que hem configurat pel FileProvider | ||
| - | if( photoURI!=null ) { | ||
| - | imageView.setImageURI(photoURI); | ||
| - | return; | ||
| - | } | ||
| - | Log.e(" | ||
| - | } | ||
| - | } | ||
| - | }</ | ||
| - | <WRAP todo> | ||
| - | **Exercici take photo full size** | ||
| - | Segueix la **part "Take full size photo" | + | <code xml AndroidManifest.xml> |
| + | < | ||
| - | **Recorda ha de ser la versió en anglès**, la traducció al castellà té errors. | + | < |
| + | android: | ||
| + | android: | ||
| + | android: | ||
| + | android: | ||
| + | < | ||
| + | android: | ||
| + | android: | ||
| + | </ | ||
| + | </ | ||
| + | </ | ||
| - | **App v0.3** - Afegeix | + | ==== 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'emmagatzema la info son diferents: | ||
| + | |||
| + | ^ ^ 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 | ||
| + | |||
| + | 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 // | ||
| </ | </ | ||
| Línia 148: | Línia 233: | ||
| **Exercici MyGallery** | **Exercici MyGallery** | ||
| - | Implementa | + | Implementa |
| - | **App v0.4** - Implementa la visualització de les fotos que anem prenent en l' | + | Visualització |
| </ | </ | ||