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_camera [2024/12/02 15:29] enric_mieza_sanchez [Accedim a la càmera i rebem una miniatura o thumbnail] |
android_camera [2024/12/16 15:53] (actual) enric_mieza_sanchez [Tutorial Kotlin] |
||
|---|---|---|---|
| Línia 11: | Línia 11: | ||
| * [[Android persistència]] | * [[Android persistència]] | ||
| * [[https:// | * [[https:// | ||
| - | * [[https:// | + | * [[https:// |
| * [[https:// | * [[https:// | ||
| Línia 31: | Línia 31: | ||
| ===== Utilitzant la App Camera externa ===== | ===== Utilitzant la App Camera externa ===== | ||
| - | Podem emprar el [[https:// | + | Podem emprar el [[https:// |
| El què sí que està obsolet del tutorial és com llençar una altra app externa per rebre dades. Inicialment es feia amb el mètode < | El què sí que està obsolet del tutorial és com llençar una altra app externa per rebre dades. Inicialment es feia amb el mètode < | ||
| Línia 91: | Línia 91: | ||
| **Exercici Take Photo thumbnail** | **Exercici Take Photo thumbnail** | ||
| - | Segueix la primera part del [[https:// | + | Segueix la primera part del [[https:// |
| - El **codi perquè l''' | - El **codi perquè l''' | ||
| fotoButton.setOnClickListener(new View.OnClickListener() { | fotoButton.setOnClickListener(new View.OnClickListener() { | ||
| Línia 133: | Línia 133: | ||
| - Utilitza també les funcions d' | - Utilitza també les funcions d' | ||
| - Transforma el '' | - Transforma el '' | ||
| - | - Llançar el '' | + | - Llançar el '' |
| - | - Quan rebem el resultat a '' | + | // creem arxiu on volem guardar la imatge |
| + | String filePath = getExternalFilesDir(Environment.DIRECTORY_PICTURES | ||
| + | ).toString() + "/ | ||
| + | File photoFile = new File( filePath ); | ||
| + | // li donem permisos amb FileProvider pq hi pugui escriure l'app camera | ||
| + | // ULL: la authority ha de ser la del vostre package " | ||
| + | // igual que la que heu d' | ||
| + | photoURI = FileProvider.getUriForFile(MainActivity.this, | ||
| + | " | ||
| + | photoFile); | ||
| + | |||
| + | // Create Intent | ||
| + | Intent intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE); | ||
| + | // Afegir arxiu amb permisos del FileProvider al Intent | ||
| + | intent.putExtra(MediaStore.EXTRA_OUTPUT, | ||
| + | cameraResultLauncher.launch(intent); | ||
| + | </ | ||
| + | - Quan rebem el resultat a la callback | ||
| + | @Override | ||
| + | public void onActivityResult(ActivityResult result) { | ||
| + | if (result.getResultCode() == AppCompatActivity.RESULT_OK) { | ||
| + | // display foto | ||
| + | | ||
| + | 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> | <WRAP todo> | ||
| **Exercici take photo full size** | **Exercici take photo full size** | ||
| - | Segueix la **part "Take full size photo" | + | Segueix la **part "Take full size photo" |
| **Recorda ha de ser la versió en anglès**, la traducció al castellà té errors. | **Recorda ha de ser la versió en anglès**, la traducció al castellà té errors. | ||
| Línia 159: | Línia 199: | ||
| ===== Imatge de la càmera dins la nostra App ===== | ===== Imatge de la càmera dins la nostra App ===== | ||
| + | |||
| + | ==== Tutorial Java (medium.com) ==== | ||
| Els objectes '' | Els objectes '' | ||
| Línia 208: | Línia 250: | ||
| </ | </ | ||
| + | \\ | ||
| + | |||
| + | ==== Tutorial Kotlin ==== | ||
| + | |||
| + | Podem seguir les [[https:// | ||
| + | |||
| + | Aquest tutorial empra [[https:// | ||
| + | |||
| + | I com no, no es pot seguir al peu de la lletra, cal adaptar algunes coses. En concret al pas 2 "Crear el projecte" | ||
| + | |||
| + | - Punt 1: les biblioteques de codi< | ||
| + | dependencies { | ||
| + | // ... | ||
| + | |||
| + | val camerax_version = " | ||
| + | implementation(" | ||
| + | implementation(" | ||
| + | implementation(" | ||
| + | implementation(" | ||
| + | implementation(" | ||
| + | implementation(" | ||
| + | }</ | ||
| + | - El punt 2 de les '' | ||
| + | compileOptions { | ||
| + | sourceCompatibility = JavaVersion.VERSION_11 | ||
| + | targetCompatibility = JavaVersion.VERSION_11 | ||
| + | } | ||
| + | </ | ||
| + | - El punt 3 queda així< | ||
| + | buildFeatures { | ||
| + | viewBinding = true | ||
| + | } | ||
| + | </ | ||
| + | |||
| + | La resta queda igual. Cal anar amb compte de llegir bé els passos i entendre' | ||
| + | |||
| + | <WRAP todo> | ||
| + | Implementa el [[https:// | ||
| + | |||
| + | Redueix la '' | ||
| + | |||
| + | {{ android: | ||
| + | |||
| + | |||
| + | </ | ||
| \\ | \\ | ||