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/01/15 14:54] enric_mieza_sanchez [Imatge de la càmera dins la nostra App] |
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 39: | Línia 39: | ||
De fet, l' | De fet, l' | ||
+ | ==== Comencem accedint a la Galeria d' | ||
<WRAP todo> | <WRAP todo> | ||
Línia 55: | Línia 56: | ||
- L' | - L' | ||
</ | </ | ||
+ | |||
+ | Al final ha de quedar més o menys així: | ||
+ | |||
+ | <code java> | ||
+ | public class MainActivity extends AppCompatActivity { | ||
+ | public static int RC_PHOTO_PICKER = 0; | ||
+ | ActivityResultLauncher< | ||
+ | | ||
+ | @Override | ||
+ | protected void onCreate(Bundle savedInstanceState) { | ||
+ | super.onCreate(savedInstanceState); | ||
+ | // ...mes codi de inicialització... | ||
+ | |||
+ | someActivityResultLauncher = registerForActivityResult( | ||
+ | // ...tota la carretada per crear la callback | ||
+ | // i pintar la foto a l' | ||
+ | }); | ||
+ | |||
+ | Button button = findViewById(R.id.button); | ||
+ | button.setOnClickListener(new View.OnClickListener() { | ||
+ | // ...creem i cridem l' | ||
+ | }); | ||
+ | |||
+ | } // onCreate | ||
+ | } | ||
+ | </ | ||
+ | |||
</ | </ | ||
+ | |||
+ | |||
+ | ==== Accedim a la càmera i rebem una miniatura o thumbnail ==== | ||
<WRAP TODO> | <WRAP TODO> | ||
**Exercici Take Photo thumbnail** | **Exercici Take Photo thumbnail** | ||
- | Segueix la primera part del [[https:// | + | Segueix la primera part del [[https:// |
+ | - El **codi perquè l''' | ||
+ | fotoButton.setOnClickListener(new View.OnClickListener() { | ||
+ | @Override | ||
+ | public void onClick(View v) { | ||
+ | //Create Intent | ||
+ | Intent intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE); | ||
+ | cameraResultLauncher.launch(intent); | ||
+ | }</ | ||
- Inicialment només captarem el // | - Inicialment només captarem el // | ||
- Implementa la crida a la app externa amb la [[https:// | - Implementa la crida a la app externa amb la [[https:// | ||
Línia 94: | 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 120: | 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 169: | 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: | ||
+ | |||
+ | |||
+ | </ | ||
\\ | \\ |