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 [2024/01/16 23:57]
enric_mieza_sanchez [Text to Speech]
android [2025/09/29 15:31] (actual)
enric_mieza_sanchez [Rècords "Hall Of Fame"]
Línia 21: Línia 21:
 Hi ha diverses opcions per desenvolupar per a Android, fem un breu resum de les més habituals: Hi ha diverses opcions per desenvolupar per a Android, fem un breu resum de les més habituals:
  
-  * **Java** sol ser la opció més comuna per desenvolupar apps per a Android. Es compilen sobre un processador virtual corresponent a la JVM (Java Virtual Machine). És el que s'anomena [[https://es.wikipedia.org/wiki/Android_Runtime|Android Runtime]].+  * **[[Kotlin]]** és la opció oficial d'Android actualment. És un llenguatge recent que compila sobre //bytecode// Dalvik d'Android i que millora certs aspectes de Java. S'ha creat per al desenvolupament d'apps Android però també amb la voluntat d'estendre's a d'altres àmbits com aplicacions d'escriptori. 
 +  * **Java** era la opció original més antiga (i oficial) per a desenvolupament d'apps per a Android. Es compilen sobre un processador virtual corresponent a la JVM (Java Virtual Machine). És el que s'anomena [[https://es.wikipedia.org/wiki/Android_Runtime|Android Runtime]].
     * [[https://stackoverflow.com/questions/9231821/dalviks-effect-on-native-c-code-performance|Es perd eficiència pel fet que Java no sigui codi nadiu?]]     * [[https://stackoverflow.com/questions/9231821/dalviks-effect-on-native-c-code-performance|Es perd eficiència pel fet que Java no sigui codi nadiu?]]
     * Llegeix [[Java]] per detalls d'instal·lació i //setup// del JDK.     * Llegeix [[Java]] per detalls d'instal·lació i //setup// del JDK.
Línia 37: Línia 38:
   * **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 ====
Línia 83: Línia 87:
   - 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 views 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/develop/ui/views/components/button?hl=es-419|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 una //callback// al ''Button'' per respondre a l'event //OnButtonClick// dins el mètode ''onCreate'' de la ''MainActivity''. En principi, el botó no fa res quan el premem. Afegir una //callback// ens permetrà captar l'event //OnClick// i fer alguna cosa. A la documentació del mateix [[https://developer.android.com/develop/ui/views/components/button?hl=es-419|Button]] trobaràs un exemple de com fer-ho.
   - Afegeix un **Toast**. El primer que podem fer per comprovar que l'event //OnClick// s'està processant és construir un [[https://developer.android.com/guide/topics/ui/notifiers/toasts#java|Toast]], que son els missatges que apareixen en un globus temporalment sobre la app, a la part inferior de la pantalla habitualment. La manera més fàcil de crear-lo és amb ''Toast.makeText'', i després fer-li un ''show'' a l'objecte perquè es visualitzi.   - Afegeix un **Toast**. El primer que podem fer per comprovar que l'event //OnClick// s'està processant és construir un [[https://developer.android.com/guide/topics/ui/notifiers/toasts#java|Toast]], que son els missatges que apareixen en un globus temporalment sobre la app, a la part inferior de la pantalla habitualment. La manera més fàcil de crear-lo és amb ''Toast.makeText'', i després fer-li un ''show'' a l'objecte perquè es visualitzi.
 </WRAP> </WRAP>
Línia 95: Línia 99:
   - La app ens oferirà un casella d'entrada de text i un botó.   - La app ens oferirà un casella d'entrada de text i un botó.
   - La app crearà un número aleatori entre 1 i 100 que el jugador haurà d'endevinar.   - La app crearà un número aleatori entre 1 i 100 que el jugador haurà d'endevinar.
-  - Cada cop que l'usuari fa una temptativa es compta un nou intent.+  - Cada cop que l'usuari fa una temptativa
 +    * Se li comunica si el número que busca és més petit o més gran. 
 +    * Es compta un nou intent i es visualitzen en algun //widget//.
   - Quan l'usuari endevina del número que la app ha "pensat", s'acaba la partida.   - Quan l'usuari endevina del número que la app ha "pensat", s'acaba la partida.
 +  - La app torna a "pensar" un nou número aleatori i comença nova partida.
   - La puntuació resultant és el nombre d'intents que ha fet l'usuari fins a endevinar el número. Quan més petita és, millor.   - La puntuació resultant és el nombre d'intents que ha fet l'usuari fins a endevinar el número. Quan més petita és, millor.
   - La app demanarà el nom a l'usuari per posar-ho a la taula de rècords. L'usuari podrà posar el seu nom o desestimar-ho.   - La app demanarà el nom a l'usuari per posar-ho a la taula de rècords. L'usuari podrà posar el seu nom o desestimar-ho.
-  - La app torna a "pensar" un nou número aleatori i comença nova partida. 
  
 ==== Aplicació principal (joc) ==== ==== Aplicació principal (joc) ====
Línia 112: Línia 118:
   - Posa un ''TextView'' per anar indicant a l'usuari l'historial dels intents i resultats que ha obtingut.   - 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''.   - Per aconseguir un //scroll// en la pantalla de l'historial podem posar un ''ScrollView'' i a dins seu posar el ''TextView''.
 +    * [[https://stackoverflow.com/questions/1748977/making-textview-scrollable-on-android|Exemple d'us de ScrollView]]. Funciona, però és un post antic, i els objectes han canviat, pel què el desplaçament fins el final està una mica confús.
 +    * Com [[https://stackoverflow.com/questions/3080402/android-scrollview-force-to-bottom|desplaçar el ScrollView fins el final]]. Aquest post sí que està actualitzat.
   - Implementa un comptador d'intents que es visualitzi en algun racó de la pantalla. Ens servirà per després fer el //ranking//.   - Implementa un comptador d'intents que es visualitzi en algun racó de la pantalla. Ens servirà per després fer el //ranking//.
  
Línia 134: Línia 142:
  
 ==== Rècords "Hall Of Fame" ==== ==== Rècords "Hall Of Fame" ====
-Per a la taula de rècords crearem una nova ''Activity'' i la obrirem amb un objecte ''Intent''. L'objecte més adient per mostrar una llista de rècords seria una ''RecyclerView'' (la versió actualitzada de ''ListView'') però té força complexitat utilitzar-la. Farem 3 versions amb dificultat incremental per anar sofisticant la nostra app i anar veient els diferents recursos que podem emprar:+Per a la taula de rècords crearem una nova ''Activity'' i la obrirem amb un objecte ''Intent''. 
 + 
 +{{ :android:activity_intent.png?500 }} 
 + 
 + 
 +L'objecte més adient per mostrar una llista de rècords seria una ''RecyclerView'' (la versió actualitzada de ''ListView'') però té força complexitat utilitzar-la. Farem 3 versions amb dificultat incremental per anar sofisticant la nostra app i anar veient els diferents recursos que podem emprar:
   - Versió més simple amb una ''TextView''   - Versió més simple amb una ''TextView''
   - Versió millorada amb un ''TableLayout''   - Versió millorada amb un ''TableLayout''
Línia 143: Línia 156:
   - Crear nova //Activity// amb el seu //layout// associat (arxiu XML): <code>File -> New -> Android Activity -> Empty Views Activity</code>   - Crear nova //Activity// amb el seu //layout// associat (arxiu XML): <code>File -> New -> Android Activity -> Empty Views Activity</code>
     * ULL! Si creeu la ''Activity'' manualment, cal afegir-la també manualment a l'arxiu ''AndroidManifest.xml''     * 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à]].+  - 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.
   - 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 o [[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:   - Diàlegs o [[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:
Línia 328: Línia 341:
  
 ==== 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. +
- +
-<WRAP info> +
-El sintetitzador de veu de les llibreries Android és local (ho sintetitza el telèfon) si tenim instal·lat l'idioma desitjat (el què hem configurat en el ''Locale'') en els ''Settings'' (Configuració) del telèfon. Si no hem descarregat el llenguatge, Android ho tradueix "al vol" però li cal connexió de xarxa, emprant un servei de Google (recordem que és el propietari del producte). +
- +
-Conclusió: si volem assegurar una síntesi local (sense emprar xarxa), configura el llenguatge als ''Settings'' del telèfon (es poden afegir diversos alhora tot i que la llengua del sistema és només una). +
-</WRAP>+
  
 \\ \\
android.1705449445.txt.gz · Darrera modificació: 2024/01/16 23:57 per enric_mieza_sanchez