bytes.cat

La wiki d'FP d'informàtica

Eines de l'usuari

Eines del lloc


android

Diferències

Ací es mostren les diferències entre la revisió seleccionada i la versió actual de la pàgina.

Enllaç a la visualització de la comparació

Ambdós costats versió prèvia Revisió prèvia
Següent revisió
Revisió prèvia
android [2022/09/26 08:31]
enrique_mieza_sanchez [Aplicació principal (joc)]
android [2024/04/23 13:29] (actual)
enric_mieza_sanchez [Desenvolupament Android]
Línia 9: Línia 9:
  
 {{tag> #Dam #DamMp08 #DamMp08Uf1 #DamMp08Uf01 #DamMp08Uf2 Android mobile java }} {{tag> #Dam #DamMp08 #DamMp08Uf1 #DamMp08Uf01 #DamMp08Uf2 Android mobile java }}
 +
  
  
Línia 36: Línia 37:
   * **Xamarin** permet treballar en C# i compilar de forma multiplataforma per a Android i iOS   * **Xamarin** permet treballar en C# i compilar de forma multiplataforma per a Android i iOS
  
 +Android Studio i les àrees de treball:
 +
 +{{:android-studio-1.png?direct|}}
  
 ==== Alguns aspectes inicials ==== ==== Alguns aspectes inicials ====
 +
 +<WRAP tip>
 La programació per a Android utilitza alguns recursos molt habituals com l'aniuament de classes i la sobreescriptura de mètodes en el moment de la instanciació. La programació per a Android utilitza alguns recursos molt habituals com l'aniuament de classes i la sobreescriptura de mètodes en el moment de la instanciació.
  
-Fes-li un cop d'ull a aquest [[https://gist.github.com/emieza/f9080b4826ea9ad9eb29fbab2c3d433a|codi d'exemple per clarificar certs aspectes de la programació Java aplicada a Android]], abans d'aprofundir en la programació Android.+Fes-li un cop d'ull a aquest [[https://gist.github.com/emieza/f9080b4826ea9ad9eb29fbab2c3d433a|codi d'exemple per clarificar certs aspectes de la programació Java aplicada a Android]], abans d'aprofundir en la programació Android. Ens aclarirà l'aniuament de classes i com emprar adequadament els punters ''this''
 +</WRAP>
  
 Tornem a referenciar-nos als [[https://ioc.xtec.cat/materials/FP/Materials/2252_DAM/DAM_2252_M08/web/html/WebContent/u1/a2/continguts.html|apunts de desenvolupament per a Android de la IOC]]. Tornem a referenciar-nos als [[https://ioc.xtec.cat/materials/FP/Materials/2252_DAM/DAM_2252_M08/web/html/WebContent/u1/a2/continguts.html|apunts de desenvolupament per a Android de la IOC]].
Línia 78: Línia 85:
   - Mira els apartats de més amunt i l'article [[Java]] per disposar de la instal·lació del IDE i llibreries adequades.   - Mira els apartats de més amunt i l'article [[Java]] per disposar de la instal·lació del IDE i llibreries adequades.
   - Es recomana utilitzar algun tipus de sistema de control de versions. El més popular és [[Git]] i la web www.github.com . Es pot fer les operacions més comunes al menú VCS de IntelliJ IDEA.   - Es recomana utilitzar algun tipus de sistema de control de versions. El més popular és [[Git]] i la web www.github.com . Es pot fer les operacions més comunes al menú VCS de IntelliJ IDEA.
-  - Si ja has llegit els apunts per aclarir els conceptes previs, podem passar a l'acció. Crea una aplicació amb una //empty activity// des del menú File->New->Project->Android+  - Si ja has llegit els apunts per aclarir els conceptes previs, podem passar a l'acció. Crea una aplicació amb una //empty views activity// des del menú File->New->Project->Android
   - Afegeix un **botó** ([[https://developer.android.com/reference/android/widget/Button|Button]]). Busca els arxius de recursos **R.layout** (carpeta ''res->layout'' i arxiu ''activity_main.xml'') per afegir-ho gràficament (millor no complicar-nos la vida abans d'hora ;).   - Afegeix un **botó** ([[https://developer.android.com/reference/android/widget/Button|Button]]). Busca els arxius de recursos **R.layout** (carpeta ''res->layout'' i arxiu ''activity_main.xml'') per afegir-ho gràficament (millor no complicar-nos la vida abans d'hora ;).
   - Afegeix un **OnButtonClickListener** al mètode ''onCreate'' de la ''MainActivity.java''. En principi, el botó no fa res quan el premem. Aquest //listener// ens permetrà captar l'event OnClick i fer alguna cosa. A la documentació del mateix [[https://developer.android.com/reference/android/widget/Button|Button]] trobaràs un exemple de com fer-ho.   - Afegeix un **OnButtonClickListener** al mètode ''onCreate'' de la ''MainActivity.java''. En principi, el botó no fa res quan el premem. Aquest //listener// ens permetrà captar l'event OnClick i fer alguna cosa. A la documentació del mateix [[https://developer.android.com/reference/android/widget/Button|Button]] trobaràs un exemple de com fer-ho.
Línia 99: Línia 106:
 ==== Aplicació principal (joc) ==== ==== Aplicació principal (joc) ====
 <WRAP todo> <WRAP todo>
-  - Crea una nova aplicació amb una sola ''Activity'' (Empty Activity).+  - Crea una nova aplicació amb una sola ''Activity'' (Empty Views Activity).
   - Ves al layout i crea la casella d'entrada per al número. Es tracta d'un objecte ''TextEdit'', però volem restringir-ho perquè només ens deixi entrar nombres i no lletres. Entre els objectes disponibles al IDE hi ha un de predefinit que ja ens ho facilita.   - Ves al layout i crea la casella d'entrada per al número. Es tracta d'un objecte ''TextEdit'', però volem restringir-ho perquè només ens deixi entrar nombres i no lletres. Entre els objectes disponibles al IDE hi ha un de predefinit que ja ens ho facilita.
   - Crea un botó i un listener perquè l'usuari validi l'entrada del número. Prova que funciona amb un Toast, per exemple.   - Crea un botó i un listener perquè l'usuari validi l'entrada del número. Prova que funciona amb un Toast, per exemple.
Línia 106: Línia 113:
   - Afegeix un [[https://developer.android.com/guide/topics/ui/dialogs?hl=es-419|AlertDialog]] per avisar l'usuari de quan acaba la partida i felicitar-lo.   - Afegeix un [[https://developer.android.com/guide/topics/ui/dialogs?hl=es-419|AlertDialog]] per avisar l'usuari de quan acaba la partida i felicitar-lo.
   - Quan s'acaba la partida, es regenera el número aleatori i es torna a jugar.   - Quan s'acaba la partida, es regenera el número aleatori i es torna a jugar.
-  - Posa un quadre de text o ''TextView'' amb ''Scroll'' per tal de facilitar el seguiment de la partida per part de l'usuari (així veurà l'històric dels números que ha anat entrant.+  - Posa un ''TextView'' per anar indicant a l'usuari l'historial dels intents i resultats que ha obtingut. 
 +  - Per aconseguir un //scroll// en la pantalla de l'historial podem posar un ''ScrollView'' i a dins seu posar el ''TextView''
 +  - Implementa un comptador d'intents que es visualitzi en algun racó de la pantalla. Ens servirà per després fer el //ranking//.
  
-Podem millorar la jugabilitat del joc amb alguns detalls més.+Podem millorar la jugabilitat amb alguns detalls més.
  
-  - A més, per facilitar el joc a l'usuari, esborrem el número del ''EditText'' que l'usuari fa un intent.+  - Per facilitar el joc a l'usuari, esborrem el número del ''EditText'' quan l'usuari fa un intent d'endevinar (si no, l'usuari haurà d'esborrar-ho manualment).
   - Es pot millorar la jugabilitat si implementem que **el joc detecti la tecla Enter** del teclat de pantalla.   - Es pot millorar la jugabilitat si implementem que **el joc detecti la tecla Enter** del teclat de pantalla.
     * S'implementa millor amb un [[https://stackoverflow.com/questions/25595414/stop-keyboard-from-closing-when-enter-is-pressed-in-edittext|OnEditorActionListener]] ja que el ''OnClickListener'' amaga el teclat al prèmer ENTER.     * S'implementa millor amb un [[https://stackoverflow.com/questions/25595414/stop-keyboard-from-closing-when-enter-is-pressed-in-edittext|OnEditorActionListener]] ja que el ''OnClickListener'' amaga el teclat al prèmer ENTER.
Línia 135: Línia 144:
 Abans, però, caldrà crear una nova ''Activity'' per poder posar-hi el rànking: Abans, però, caldrà crear una nova ''Activity'' per poder posar-hi el rànking:
 <WRAP todo> <WRAP todo>
-  - Crear nova //Activity// amb el seu //layout// associat (arxiu XML): <code>File -> New -> Android Activity -> Empty Activity</code> +  - Crear nova //Activity// amb el seu //layout// associat (arxiu XML): <code>File -> New -> Android Activity -> Empty Views Activity</code> 
-  - Afegim [[https://stackoverflow.com/questions/9173347/android-setonkeylistener-on-edittext|Intent]]: aquest objecte ens serveix per posar en marxa una altra ''Activity''. Així podrem passar de la partida a la taula de rècords. Caldrà que l'activem quan acabem la partida, o bé podem afegir un botó nou per visualitzar la taula de rècords. [[https://developer.android.com/training/basics/firstapp/starting-activity?hl=es-419|Aquest exemple per obrir una nova activity t'ajudarà]].+    * ULL! Si creeu la ''Activity'' manualment, cal afegir-la també manualment a l'arxiu ''AndroidManifest.xml'' 
 +  - Afegim [[https://developer.android.com/guide/components/intents-filters?hl=es-419|Intent]]: aquest objecte ens serveix per posar en marxa una altra ''Activity''. Així podrem passar de la partida a la taula de rècords. Caldrà que l'activem quan acabem la partida, o bé podem afegir un botó nou per visualitzar la taula de rècords. [[https://developer.android.com/training/basics/firstapp/starting-activity?hl=es-419|Aquest exemple per obrir una nova activity t'ajudarà]].
   - Per tal que puguem afegir una nova entrada a la taula de rècords caldrà que el ''MainActivity'' passi el paràmetre del nº d'intents que el jugador ha realitzat. Per passar paràmetres examina el mètode ''putExtra()'' de l'objecte ''Intent''.   - Per tal que puguem afegir una nova entrada a la taula de rècords caldrà que el ''MainActivity'' passi el paràmetre del nº d'intents que el jugador ha realitzat. Per passar paràmetres examina el mètode ''putExtra()'' de l'objecte ''Intent''.
-  - Diàlegs ([[https://developer.android.com/guide/topics/ui/dialogs?hl=es-419|Dialogs]]): abans d'obrir la ''RecordsActivity'' convé que demanem a l'usuari si vol o no afegir el seu rècord a la taula. El //widget// Dialog ens permetrà fer això, i també demanar el nom de l'usuari. +  - Diàlegs [[https://developer.android.com/guide/topics/ui/dialogs?hl=es-419|Dialogs]]: abans d'obrir la ''RecordsActivity'' convé que demanem a l'usuari si vol o no afegir el seu rècord a la taula. El //widget// Dialog ens permetrà fer això, i també demanar el nom de l'usuari. Tenim 2 estratègies diferents per implementar el ''Dialog'' que necessitem: 
-    - la documentació oficial hi ha diversos //Dialogs// prefabricats disponibles. Però nosaltres necessitem fer-ne un de personalitzat que ens demani el nom i prou. Aneu a la [[https://developer.android.com/guide/topics/ui/dialogs?hl=es-419#CustomLayout|secció de la documentació dels diàlegs personalitzats]]. +    - [[http://www.androidsnippets.com/prompt-user-input-with-an-alertdialog.html|Particularitzar un AlertDialog]] per afegir-li un EditText programàticament, sense xml, al instanciar la classe. És la forma més senzilla i amb menys codi. 
-    Caldrà que creis un //layout// xml per definir el camp de text i els botons del vostre quadre de diàleg. +    - Dialog personalitzat (més complicat): a la documentació oficial hi ha diversos ''Dialog'' prefabricats disponibles. Però nosaltres necessitem fer-ne un de personalitzat que ens demani el nom i prou. Aneu a la [[https://developer.android.com/guide/topics/ui/dialogs?hl=es-419#CustomLayout|secció de la documentació dels diàlegs personalitzats]]. 
-    [[https://stackoverflow.com/questions/6626006/android-custom-dialog-cant-get-text-from-edittext|Aquesta pregunta de stackoverflow pot ajudar-te]] a crear un diàleg personalitzat per preguntar el nom+      Caldrà que creis un //layout// xml per definir el camp de text i els botons del vostre quadre de diàleg. 
-    - [[http://www.androidsnippets.com/prompt-user-input-with-an-alertdialog.html|Versió alternativa de Dialog]] per crear-lo programàticament, sense xml.+      [[https://stackoverflow.com/questions/6626006/android-custom-dialog-cant-get-text-from-edittext|Aquesta pregunta de stackoverflow pot ajudar-te]] a crear un diàleg personalitzat per preguntar el nom.
 </WRAP> </WRAP>
  
Línia 262: Línia 272:
  
 ===== Més coses interessants ===== ===== Més coses interessants =====
 +
 +\\
 +
 +==== Launcher Icons ====
 +Per personalitzar la icona que es veurà al //launcher// del dispositiu mòbil podeu [[https://stackoverflow.com/questions/43167057/libgdx-android-icon-not-being-applied|llegir aquest post sobre com canviar el launcher icon]].
 +
 +Podeu fer servir aquesta fantàstica eina: https://icon.kitchen
 +
 +\\
 +
 +==== Depuració Wireless ====
 +Seguiu aquest [[https://developer.android.com/tools/adb#wireless|article oficial de ADB per connectar-vos al vostre dispositiu mòbil via Wi-Fi]].
  
 \\ \\
Línia 309: Línia 331:
  
 ==== Text to Speech ==== ==== Text to Speech ====
-Una funció interessant per a les nostres apps és fer-la parlar. Per fer-ho, podeu gravar vosaltres els sons, però és molt interessant utilitzar el sintetitzador de veu d'Android, amb la llibreria Text-to-Speech. Així podem fer-li parlar qualsevol cosa, sense haver d'enregistrar abans. Val a dir que en els idiomes més parlats (anglès, castellà, francès, xinès) funciona molt bé, però en català el sintetitzador és de poca qualitat. 
  
-  - [[https://www.tutorialspoint.com/android/android_text_to_speech.htm|Tutorial per utilitzar Text-to-Speech en Android]]. +Pots mirar més sobre reconeixement i síntesi de veu a l'article [[Android Speech]].
-  - [[https://developer.android.com/reference/android/speech/tts/TextToSpeech|Documentació oficial de Text-to-Speech per a Android]]+
-  - Exemple [[https://stackoverflow.com/questions/3577058/android-tts-languages|per canviar de llengua (Locale)]] per a llengües que no estan als objectes principals.+
  
 \\ \\
android.1664181076.txt.gz · Darrera modificació: 2022/09/26 08:31 per enrique_mieza_sanchez