Differences

This shows you the differences between two versions of the page.

Link to this comparison view

Both sides previous revision Previous revision
Next revision
Previous revision
laboratoare:laborator02 [2016/02/09 11:31]
127.0.0.1 external edit
laboratoare:laborator02 [2016/03/04 09:41]
Andrei Roșu-Cojocaru
Line 272: Line 272:
   super.onSaveInstanceState(savedInstanceState);​   super.onSaveInstanceState(savedInstanceState);​
   EditText usernameEditText = (EditText)findViewById(R.id.username_edit_text);​   EditText usernameEditText = (EditText)findViewById(R.id.username_edit_text);​
-  ​state.putString(Constants.USERNAME_EDIT_TEXT,​ usernameEditText.getText());​+  ​savedInstanceState.putString(Constants.USERNAME_EDIT_TEXT,​ usernameEditText.getText());​
 } }
 </​code>​ </​code>​
Line 334: Line 334:
 {{ :​laboratoare:​laborator02:​coordonare_activitati.png?​nolink&​400 }} {{ :​laboratoare:​laborator02:​coordonare_activitati.png?​nolink&​400 }}
  
-===== Structura unui Proiect Android în Eclipse ​Luna SR1a (4.4.1) =====+===== Structura unui Proiect Android în Eclipse ​Mars 1 (4.5.1) =====
  
 Structura unui proiect Android în mediul integrat de dezvoltare Eclipse Luna SR1a (4.4.1) poate fi observată în fereastra //Package Explorer//. Structura unui proiect Android în mediul integrat de dezvoltare Eclipse Luna SR1a (4.4.1) poate fi observată în fereastra //Package Explorer//.
Line 346: Line 346:
     * ''​maps.jar''​ - folosită de aplicațiile Android care implementează funcționalități legate de localizare.     * ''​maps.jar''​ - folosită de aplicațiile Android care implementează funcționalități legate de localizare.
   * **Android Private Libraries** conține un singur fișier ''​android-support-v4.jar'';​   * **Android Private Libraries** conține un singur fișier ''​android-support-v4.jar'';​
-  * **src** - conține sursele ''​.java''​ ale proiectului,​ organizate pe pachete. În exemplu, ​există un singur fișier, ​''​LifecycleMonitorActivity.java''​ (în pachetul ''​ro.pub.cs.systems.pdsd.lab02.graphicuserinterface''​) ​care reprezintă codul sursă al activității principale ​a aplicației Android.+  * **src** - conține sursele ''​.java''​ ale proiectului,​ organizate pe pachete. În exemplu, ​codul este organizat pe trei pachete, cea mai importantă clasă fiind ''​LifecycleMonitorActivity.java''​ (în pachetul ''​ro.pub.cs.systems.pdsd.lab02.graphicuserinterface''​) ​continand activitatea principala ​a aplicației Android.
   * **gen** - cuprinde fișiere generate:   * **gen** - cuprinde fișiere generate:
     * ''​BuildConfig.java''​ - definește unele proprietăți ale aplicației (cum ar fi activarea sau nu a modului de depanare);     * ''​BuildConfig.java''​ - definește unele proprietăți ale aplicației (cum ar fi activarea sau nu a modului de depanare);
Line 447: Line 447:
       * un element de tip ''​CheckBox''​ prin intermediul căruia utilizatorul va putea să indice dacă dorește ca informațiile sale de autentificare să fie reținute sau nu;       * un element de tip ''​CheckBox''​ prin intermediul căruia utilizatorul va putea să indice dacă dorește ca informațiile sale de autentificare să fie reținute sau nu;
       * două butoane, dispuse folosind un mecanism de aliniere orizontală,​ prin intermediul cărora utilizatorul poate să transmită (către un server) informațiile sale de autentificare,​ pentru a fi procesate, respectiv dorește să anuleze informațiile introduse;       * două butoane, dispuse folosind un mecanism de aliniere orizontală,​ prin intermediul cărora utilizatorul poate să transmită (către un server) informațiile sale de autentificare,​ pentru a fi procesate, respectiv dorește să anuleze informațiile introduse;
-    * ''​menu'':​ fișierul ''​main.xml''​ conține un meniu care se va afișa la accesarea butonului ''​Options'',​ fiind folosit de ''​metoda ​onCreateOptionsMenu()'';​+    * ''​menu'':​ fișierul ''​main.xml''​ conține un meniu care se va afișa la accesarea butonului ''​Options'',​ fiind folosit de metoda ​''​onCreateOptionsMenu()'';​
     * ''​values''​     * ''​values''​
       * ''​colors.xml'':​ conține definițiile pentru culorile utilizate în cadrul interfeței grafice, ca fundal; <file xml colors.xml>​       * ''​colors.xml'':​ conține definițiile pentru culorile utilizate în cadrul interfeței grafice, ca fundal; <file xml colors.xml>​
Line 614: Line 614:
  
 {{ :​laboratoare:​laborator02:​eclipse_perspectives_for_android.png?​nolink }} {{ :​laboratoare:​laborator02:​eclipse_perspectives_for_android.png?​nolink }}
 +
 === Android Debug Bridge (ADB) === === Android Debug Bridge (ADB) ===
 +
 Android Debug Bridge este un utilitar în linie de comandă care permite comunicarea cu cu un dispozitiv mobil fizic sau cu un emulator, prin intermediul unui program client-server ce include 3 componente: ​ Android Debug Bridge este un utilitar în linie de comandă care permite comunicarea cu cu un dispozitiv mobil fizic sau cu un emulator, prin intermediul unui program client-server ce include 3 componente: ​
   * un client, apelat prin comanda ''​adb''​ (alți clienți sunt plugin-ul ADT, DDMS-ul, Hierarchy View);   * un client, apelat prin comanda ''​adb''​ (alți clienți sunt plugin-ul ADT, DDMS-ul, Hierarchy View);
Line 624: Line 626:
   * pentru a folosi ADB shell, device-ul Android trebuie să fie root-at (imaginile genymotion sunt deja).   * pentru a folosi ADB shell, device-ul Android trebuie să fie root-at (imaginile genymotion sunt deja).
   * comenzile ADB pot fi rulate din linia de comandă sau din script, având următorul format:<​code>​   * comenzile ADB pot fi rulate din linia de comandă sau din script, având următorul format:<​code>​
-student@pdsd2015:/​opt/​android-sdk-linux/​platform-tools$ adb [-d|-e|-s <​serialNumber>​] <​command>​+student@eim2016:/​opt/​android-sdk-linux/​platform-tools$ adb [-d|-e|-s <​serialNumber>​] <​command>​
 </​code>​ </​code>​
   * înainte de a utiliza comenzi ''​adb''​ este important să fie cunoscut identificatorul dispozitivului care este conectat la serverul adb, acesta putând fi identificat prin comanda ''​adb devices'':<​code>​   * înainte de a utiliza comenzi ''​adb''​ este important să fie cunoscut identificatorul dispozitivului care este conectat la serverul adb, acesta putând fi identificat prin comanda ''​adb devices'':<​code>​
-student@pdsd2015:/​opt/​android-sdk-linux/​platform-tools$ adb devices+student@eim2016:/​opt/​android-sdk-linux/​platform-tools$ adb devices
 List of devices attached ​ List of devices attached ​
 emulator-5556 ​          ​device emulator-5556 ​          ​device
Line 783: Line 785:
  
 ===== Activitate de Laborator ===== ===== Activitate de Laborator =====
 +
 **1.** În contul Github personal, să se creeze un depozit denumit '​Laborator02'​. Inițial, acesta trebuie să fie gol (nu trebuie să bifați nici adăugarea unui fișier ''​README.md'',​ nici a fișierului ''​.gitignore''​ sau a a fișierului ''​LICENSE''​). **1.** În contul Github personal, să se creeze un depozit denumit '​Laborator02'​. Inițial, acesta trebuie să fie gol (nu trebuie să bifați nici adăugarea unui fișier ''​README.md'',​ nici a fișierului ''​.gitignore''​ sau a a fișierului ''​LICENSE''​).
  
-**2.** Să se cloneze în directorul de pe discul local conținutul depozitului la distanță de la [[https://​www.github.com/​pdsd2015/​Laborator02|]]. În urma acestei operații, directorul Laborator02 va trebui să se conțină proiectul Eclipse ​denumit ​''​ActivityLifecycleMonitor'',​ fișierul ''​README.md''​ și un fișier ''​.gitignore''​ care indică tipurile de fișiere (extensiile) ignorate. <​code>​ +**2.** Să se cloneze în directorul de pe discul local conținutul depozitului la distanță de la [[https://​www.github.com/​eim2016/​Laborator02|]]. În urma acestei operații, directorul Laborator02 va trebui să se conțină ​un director ''​labtasks''​ ce va deține atât proiectul AndroidStudio cât și proiectul Eclipse, ambele denumite ​''​ActivityLifecycleMonitor'',​ fișierul ''​README.md''​ și un fișier ''​.gitignore''​ care indică tipurile de fișiere (extensiile) ignorate. <​code>​ 
-student@pdsd2015:~$ git clone https://​www.github.com/​pdsd2015/​Laborator02+student@eim2016:~$ git clone https://​www.github.com/​eim2016/​Laborator02.git
 </​code>​ </​code>​
  
 **3.** Să se încarce conținutul descărcat în cadrul depozitului '​Laborator02'​ de pe contul Github personal. ​ <​code>​ **3.** Să se încarce conținutul descărcat în cadrul depozitului '​Laborator02'​ de pe contul Github personal. ​ <​code>​
-student@pdsd2015:~$ cd Laborator02 +student@eim2016:~$ cd Laborator02 
-student@pdsd2015:​~/​Laborator02$ git remote add Laborator02_perfectstudent https://​github.com/​perfectstudent/​Laborator02 +student@eim2016:​~/​Laborator02$ git remote add Laborator02_perfectstudent https://​github.com/​perfectstudent/​Laborator02 
-student@pdsd2015:​~/​Laborator02$ git push Laborator02_perfectstudent master+student@eim2016:​~/​Laborator02$ git push Laborator02_perfectstudent master
 </​code>​ </​code>​
  
Line 801: Line 804:
 {{ :​laboratoare:​laborator02:​eclipse_import_project02.png?​nolink&​500 }} {{ :​laboratoare:​laborator02:​eclipse_import_project02.png?​nolink&​500 }}
  
-**5.** În clasa ''​LifecycleMonitorActivity''​ din pachetul ''​ro.pub.cs.systems.pdsd.lab02.graphicuserinterface'',​ să se suprascrie metodele care monitorizează ciclul de viață al unei activități;​ fiecare dintre acestea va trebui **să apeleze metoda părinte** și **să notifice apelarea sa prin intermediul unui mesaj**, având prioritatea ''​DEBUG''​ și eticheta ''​lifecycleevents'':<​code java>+**5.** În clasa ''​LifecycleMonitorActivity''​ din pachetul ''​ro.pub.cs.systems.eim.lab02.activitylifecyclemonitor.graphicuserinterface'',​ să se suprascrie metodele care monitorizează ciclul de viață al unei activități;​ fiecare dintre acestea va trebui **să apeleze metoda părinte** și **să notifice apelarea sa prin intermediul unui mesaj**, având prioritatea ''​DEBUG''​ și eticheta ''​lifecycleevents'':<​code java>
 Log.d(Constants.TAG,​ "??? method was invoked"​);​ Log.d(Constants.TAG,​ "??? method was invoked"​);​
 </​code>​ </​code>​
Line 811: Line 814:
     - ''​onDestroy()''​     - ''​onDestroy()''​
  
-**6.** Să se creeze un filtru, denumit ''​ActivityLifecycleMonitor'',​ astfel încât LogCat să afișeze doar mesajele care au eticheta ''​lifecycleevents'',​ generate de aplicația ''​ro.pub.cs.systems.pdsd.lab02''​ și au cel puțin prioritatea ''​debug''​.+**6.** Să se creeze un filtru, denumit ''​ActivityLifecycleMonitor'',​ astfel încât LogCat să afișeze doar mesajele care au eticheta ''​activitylifecyclemonitor'',​ generate de aplicația ''​ro.pub.cs.systems.eim.lab02.activitylifecyclemonitor''​ și au cel puțin prioritatea ''​debug''​.
  
 **7.** Să se modifice mesajul din metoda ''​onCreate()'',​ astfel încât să se indice dacă activitatea a mai fost lansată în execuție anterior sau nu (dacă există o stare a activității care trebuie restaurată). **7.** Să se modifice mesajul din metoda ''​onCreate()'',​ astfel încât să se indice dacă activitatea a mai fost lansată în execuție anterior sau nu (dacă există o stare a activității care trebuie restaurată).
Line 821: Line 824:
     - se ține apăsat butonul //Home// o perioadă de timp mai mare     - se ține apăsat butonul //Home// o perioadă de timp mai mare
     - se primește un apel telefonic\\ a) pentru AVD, se poate folosi //DDMS// → //Emulator Control//\\ b) pentru Genymotion se poate simula doar formarea unui număr de telefon <​code>​     - se primește un apel telefonic\\ a) pentru AVD, se poate folosi //DDMS// → //Emulator Control//\\ b) pentru Genymotion se poate simula doar formarea unui număr de telefon <​code>​
-student@pdsd2015:/​opt/​android-sdk-linux/​platform-tools$ adb devices+student@eim2016:/​opt/​android-sdk-linux/​platform-tools$ adb devices
 List of devices attached ​ List of devices attached ​
 192.168.56.101:​5555 device 192.168.56.101:​5555 device
-student@pdsd2015:/​opt/​android-sdk-linux/​platform-tools$ adb -s 192.168.56.101:​5555 shell+student@eim2016:/​opt/​android-sdk-linux/​platform-tools$ adb -s 192.168.56.101:​5555 shell
 root@android:/​ # am start -a android.intent.action.CALL tel:​1122334455 root@android:/​ # am start -a android.intent.action.CALL tel:​1122334455
 +Starting: Intent { act=android.intent.action.CALL dat=tel:​xxxxxxxxxx }
 </​code>​ </​code>​
       - se acceptă convorbirea       - se acceptă convorbirea
Line 851: Line 855:
 **10.** Să se implementeze metoda ''​onSaveInstanceState()'',​ astfel încât, **în condițiile în care este bifat elementul grafic de tip ''​CheckBox''​**,​ să se salveze informațiile din interfața cu utilizatorul. **10.** Să se implementeze metoda ''​onSaveInstanceState()'',​ astfel încât, **în condițiile în care este bifat elementul grafic de tip ''​CheckBox''​**,​ să se salveze informațiile din interfața cu utilizatorul.
  
-<note tip>Se vor folosi metodele ''​putString()''​ și ''​putBoolean()''​ ale clasei ''​Bundle''​.\\ \\ Cheile sub care vor fi identificate valorile salvate sunt definite în interfața ''​Constants''​ din pachetul ''​ro.pub.cs.systems.pdsd.lab02.general''​.\\ \\ Verificarea faptului că un element grafic de tip ''​CheckBox''​ este bifat se face prin intermediul metodei ''​isChecked()''​.</​note>​+<note tip>Se vor folosi metodele ''​putString()''​ și ''​putBoolean()''​ ale clasei ''​Bundle''​.\\ \\ Cheile sub care vor fi identificate valorile salvate sunt definite în interfața ''​Constants''​ din pachetul ''​ro.pub.cs.systems.eim.lab02.activitylifecyclemonitor.general''​.\\ \\ Verificarea faptului că un element grafic de tip ''​CheckBox''​ este bifat se face prin intermediul metodei ''​isChecked()''​.</​note>​
  
 Să se observe comportamentul aplicației în condițiile producerii evenimentului descris anterior. Să se observe comportamentul aplicației în condițiile producerii evenimentului descris anterior.
Line 857: Line 861:
 **11.** Să se implementeze metoda ''​onRestoreInstanceState()''​ astfel încât să se restaureze starea elementelor grafice. Să se observe comportamentul aplicației în condițiile producerii evenimentului descris anterior. **11.** Să se implementeze metoda ''​onRestoreInstanceState()''​ astfel încât să se restaureze starea elementelor grafice. Să se observe comportamentul aplicației în condițiile producerii evenimentului descris anterior.
  
-Să se transfere comportamentul de restaurare a stării pe metoda ''​onCreate()''​ și să se identifice diferențele de implementare.+Să se transfere comportamentul de restaurare a stării pe metoda ''​onCreate()''​ și să se identifice diferențele de implementare ​([[http://​developer.android.com/​training/​basics/​activity-lifecycle/​recreating.html|Hint]]).
  
 **12.** ​ Să se încarce modificările realizate în cadrul depozitului '​Laborator02'​ de pe contul Github personal, folosind un mesaj sugestiv. <​code>​ **12.** ​ Să se încarce modificările realizate în cadrul depozitului '​Laborator02'​ de pe contul Github personal, folosind un mesaj sugestiv. <​code>​
-student@pdsd2015:​~/​Laborator02$ git add ActivityLifecycleMonitor/​src/​ro/​pub/​cs/​systems/​pdsd/​lab02/* +student@eim2016:​~/​Laborator02$ git add labtasks/* 
-student@pdsd2015:​~/​Laborator02$ git commit -m "​implemented taks for laboratory 02" +student@eim2016:​~/​Laborator02$ git commit -m "​implemented taks for laboratory 02" 
-student@pdsd2015:​~/​Laborator02$ git push Laborator02_perfectstudent master+student@eim2016:​~/​Laborator02$ git push Laborator02_perfectstudent master
 </​code>​ </​code>​
  
laboratoare/laborator02.txt · Last modified: 2017/02/20 20:54 (external edit)
CC Attribution-Share Alike 4.0 International
Driven by DokuWiki Recent changes RSS feed Valid CSS Valid XHTML 1.0