Differences

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

Link to this comparison view

pdm:laboratoare:05 [2016/03/21 00:11]
alexandru.radovici
pdm:laboratoare:05 [2016/03/22 12:22] (current)
alexandru.radovici [Exerciții]
Line 1: Line 1:
-====== Laborator 05 - Intenții ======+====== Laborator 5 - Intenții ======
  
 ===== Intenții ===== ===== Intenții =====
Line 401: Line 401:
 ===== Exerciții ===== ===== Exerciții =====
  
-[**0**]. Să se cloneze în directorul ​de pe discul local conținutul depozitului la distanță de la [[https://​www.github.com/​andreirosucojocaru/​DAndroid2015_Laborator05.git|]]. În urma acestei operații, directorul ''​Laborator05'' ​va trebui ​să conțină subdirectorul ''​labtasks'' ​(cu proiectele Android Studio ''​MessageMe''​ si ''​DateAndTime''​), fișierele ''​README.md''​ și ''​LICENSE''​. <​code>​ +  - Realizati o aplicatie Android care permite utiliztaorului sa introduca un numar de telefon si sa il apelezeFolositi ACTION_DIAL si ACTION_CALLIncercati si pe simulator si pe telefonPe simulator ​va trebui ​sa cereti permisiunea PHONE_CALL ​(requestPermission). 
-student@dandroid2015:​~$ git clone https://​www.github.com/​andreirosucojocaru/​DAndroid2015_Laborator05.git +  - Adaugati in aplicatia posibilitate ​de a trimite ​un SMS acelui numarFolositi ACTION_VIEW si SmsManagerIncercati si pe simulator si pe telefon
-</​code>​ +  - Adaugati aplicatiei anterioare posibilitatea de pune o semnatura ​pentru ​utiliztaorAdaugati un buton care deschide ​alta activitate unde utilizatorul isi poate scrie o semnaturaAcesa semantura este adaugata la SMS-urile trimise
-Să se importe în mediul integrat ​de dezvoltare Android Studio proiectele ''​MessageMe''​ si ''​DateAndTime''​. +  ​- Realizati o aplicatie ​care scrie afiseaza in logcat ​(System.out Sau Logsms-urile primite. (BroadcastReceiver
- +  - Realizati o aplicatie ​care afiseaza SMS-urile ​primite ​(porniti o activitate ​la primirea unui SMS
-[**1**]. Să se adauge o acțiune asociată evenimentului de apăsare ​butonului ''​notYetRegisteredButton'',​ astfel încât să se lanseze în execuție activitatea ''​RegisterActivity''​. În cadrul acesteia, un utilizator are posibilitatea de a-și crea un cont, prin completarea unor câmpuriPentru ca operația să fie realizată cu succes, este necesar ca toate atributele să fie specificate,​ iar valorile indicate în cadrul parolelor să corespundăRezultatul va fi transmis înapoi activității ''​LoginActivity''​ care îl va afișa ​pe ecran+  - Inregistrati ​activitate ​care poate afisa fisiere ​de tip text (Activitatea este pronita ​de actiunea VIEW si categoria DEFAULT ​si are in data textul
- +  - Să se implementeze un ascultător pentru mesaje cu difuzare în aplicația ''​MessageMe'',​ care interceptează mesajele trimise de sistemul de operare Android cu privire la schimbările legate de conectivitatea la Internet. Acesta va jurnaliza toate operațiile care au fost detectate, cu ajutorul ''​Logcat''​. Acțiunea care este transmisă în acest caz este ''​android.net.conn.CONNECTIVITY_CHANGE''​. Astfel înregistrat,​ un obiect de acest tip va fi invocat în mod automat, furnizând informații legate de existența unei conexiuni precum și a unei rețele fără fir.
-**a)** În activitatea ''​LoginActivity''​ se va asocia butonului ''​notRegisteredYetButton''​ un obiect ascultător ​pentru ​evenimentele de tip apăsare (''​View.OnClickListener''​) ​care implementează metoda de callback ''​onClick(View)''​. În cadrul acesteia, se va constui ​**intenție implicită** (definită pe baza acțiunii - ''​Constants.REGISTER_ACTIVITY_INTENT_ACTION''​),​ după care se va lansa în execuție activitatea corespunzătoare în așteptarea unui rezultat (metoda ''​setActivityForResult()''​ primește ca parametri intenția și codul de cerere ​''​Constants.REGISTER_ACTIVITY_REQUEST_CODE''​). +
- +
-**b)** În activitatea ''​RegisterActivity''​ se va proceda similar pentru butoanele ''​registerButton'',​ respectiv ''​cancelButton'':​ +
-  ​* în cazul ''​registerButton''​ se verifică ca toate câmpurile să fi fost completate și ca parolele să corespundă,​ situație în care se transmite activității părinte rezultatul ''​Activity.RESULT_OK'',​ activitatea încheindu-și execuția ​(se apelează metoda ''​finish()''​). +
-  * în cazul ''​cancelButton''​ se transmite activității părinte rezultatul ''​Activity.RESULT_CANCELED'',​ activitatea încheindu-și execuția (se apelează metoda ''​finish()''​). +
- +
-**c)** În clasa ''​LoginActivity''​ se va implementa metoda ''​onActivityResult()''​ ce verifică rezultatul cu care s-a terminat activitatea invocată, afișându-l în cadrul interfeței grafice. +
- +
-<code java> +
-@Override +
-public void onActivityResult(int requestCode,​ int resultCode, Intent intent)+
-</​code>​ +
- +
-Metoda primește ca parametri: +
-  ​* ''​requestCode'' ​codul de cerere transmis ca parametru în metoda ''​startActivityForResult()'',​ în funcție de care se identifică eventualele răspunsuri ​primite ​de la invocări diferite; +
-  * ''​resultCode''​ - codul de răspuns (rezultatul); +
-  ​* ''​Intent'' ​obiect prin intermediul căruia pot fi furnizate informații suplimentare. +
- +
-<note tip> +
-Pentru afișarea unui mesaj se poate utiliza următorul cod sursă: +
-<code java> +
-Snackbar.make(notRegisteredYetButton,​ getResources().getString(R.string.activity_returned_with_result) + " " + resultCode, Snackbar.LENGTH_LONG).show();​ +
-</​code>​ +
-</​note>​ +
- +
-[**2**]. Să se adauge ​acțiune asociată evenimentului de apăsare a butonului ''​loginButton'',​ astfel încât să se lanseze în execuție activitatea ''​MainActivity''​. În acest scop, este necesar să se verifice faptul că numele de utilizator și parola au fost completate corespunzător. Pentru invocarea componentei,​ se va folosi o **intenție explicită** (indicată prin denumirea clasei ​care o implementează). Informațiile nume de utilizator și parolă trebuie incluse în câmpul ''​extra''​ al intenției (folosindu-se cheile ''​Constants.USERNAME'',​ respectiv ''​Constants.PASSWORD''​). +
- +
-[**3**]. În fragmentul ''​ProfileFragment'',​ să se obțină valorile corespunzătoare numelui de utilizator și parolei provenite de la activitatea care l-a invocat, prin intermediul intenției corespunzătoare. Să se afișeze aceste valori în câmpurile ​text ''​usernameTextView'',​ respectiv ''​passwordTextView''​. +
- +
-<note tip>​Toate aceste operații trebuie să fie realizate în cadrul metodei ''​onActivityCreated()''​ pentru că numai în acest moment se garantează faptul că activitatea din care face parte fragmentul poate fi accesată.</​note>​ +
- +
-[**4**]. În fragmentul ''​ProfileFragment'',​ să se implementeze trei butoane prin care să se invoce, folosind mecanisme diferite, activitatea ''​DateAndTimeActivity''​ din contextul altei aplicații Android. Această activitate afișează data și ora curente, folosind un calendar și un ceas analogic. +
- +
-**a)** Se va folosi **o intenție** calificată prin intermediul acțiunii ''​Constants.DATE_AND_TIME_INTENT_ACTION''​. Această valoare trebuie inclusă și în fișierul ''​AndroidManifest.xml''​ al proiectului ''​DateAndTime'',​ în cadrul unui alt filtru ​de intenție, ce va avea categoria ​''​android.intent.category.DEFAULT''​. +
- +
-<code xml> +
-<​intent-filter>​ +
-  <action android:​name="​org.rosedu.dandroid.dateandtime.intent.action.DateAndTimeActivity"​ /> +
-  <​category android:​name="​android.intent.category.DEFAULT"​ /> +
-</​intent-filter>​ +
-</​code>​ +
- +
-**b)** Se va folosi **un ascultător de mesaje cu difuzare**. Tipul de acțiune utilizat va fi ''​Constants.DATE_AND_TIME_BROADCAST_RECEIVER_ACTION''​. Este necesar să se utilizeze metoda ''​sendBroadcast()''​. În fișierul ''​AndroidManifest.xml''​ al proiectului ''​DateAndTime'',​ este necesar să se defineacă un element ''<​receiver>''​ care va specifica clasa ce implementează obiectul ascultător pentru mesaje cu difuzare și acțiunea în cadrul unui filtru de intenții. +
- +
-<code xml> +
-<​receiver android:​name="​.controller.DateAndTimeBroadcastReceiver">​ +
-  ​<intent-filter>​ +
-    <action android:​name="​org.rosedu.dandroid.dateandtime.broadcastreceiver.action.DateAndTimeActivity"/>​ +
-  </​intent-filter>​ +
-</​receiver>​ +
-</​code>​ +
- +
-Clasa ''​DateAndTimeBroadcastReceiver''​ (derivată din ''​BroadcastReceiver''​) prelucrează mesajele cu difuzare care respectă anumite criterii, metoda ''​onReceive()''​ fiind apelată în mod automat. În cadrul acestei metode, trebuie să se invoce mai departe, tot prin intermediul unei intenții, activitatea ''​DateAndTimeActivity''​. Fiind vorba de invocarea unei activități din cadrul aceleiași clase, se va utiliza o intenție explicită (definită prin denumirea clasei). +
- +
-<note important>​Este necesar să se indice flag-ul ''​Intent.FLAG_ACTIVITY_NEW_TASK'',​ în caz contrar activitatea neputând fi lansată în execuție.</​note>​ +
- +
-<file java DateAndTimeBroadcastReceiver.java>​ +
-public class DateAndTimeBroadcastReceiver extends BroadcastReceiver { +
- +
-  @Override +
-  public void onReceive(Context context, Intent intent) { +
-    Intent mainActivityIntent = new Intent(context.getApplicationContext(),​ DateAndTimeActivity.class);​ +
-    mainActivityIntent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);​ +
-    context.getApplicationContext().startActivity(mainActivityIntent);​ +
-  } +
- +
-+
-</​file>​ +
- +
-**c)** Se va folosi **un URI** (Uniform Resource Identifier). Invocarea se face prin intermediul unui identificator de resurse (conținut de obiectul ''​Constants.DATE_AND_TIME_URI_ACTION''​),​ pe care se aplică acțiunea ''​Intent.ACTION_VIEW''​. URI-ul conține același protocol și aceeași gazdă ca cele definite în secțiunea de date a fișierului ''​AndroidManifest.xml''​ din cadrul proiectului ''​DateAndTime''​. +
- +
-<code xml> +
-<​intent-filter>​ +
-  <action android:​name="​android.intent.action.VIEW"​ /> +
-  <​category android:​name="​android.intent.category.DEFAULT"​ /> +
-  <data +
-    android:​scheme="​dateandtimeprotocol"​ +
-    android:​host="​dandroid.rosedu.org"​ /> +
-</​intent-filter>​ +
-</​code>​ +
- +
-<note tip>De remarcat este faptul că pentru aceeași activitate pot fi definite mai multe filtre de intenții având un conținut diferit.</​note>​ +
- +
-<note tip>​Aplicația ''​DateAndTime''​ trebuie să fie instalată înainte de a se face invocările din aplicația ''​MessageMe'',​ în caz contrar fiind generată o excepție.</​note>​ +
- +
-[**BONUS**]. ​Să se implementeze un ascultător pentru mesaje cu difuzare în aplicația ''​MessageMe'',​ care interceptează mesajele trimise de sistemul de operare Android cu privire la schimbările legate de conectivitatea la Internet. Acesta va jurnaliza toate operațiile care au fost detectate, cu ajutorul ''​Logcat''​. Acțiunea care este transmisă în acest caz este ''​android.net.conn.CONNECTIVITY_CHANGE''​. Astfel înregistrat,​ un obiect de acest tip va fi invocat în mod automat, furnizând informații legate de existența unei conexiuni precum și a unei rețele fără fir.+
  
 <code java> <code java>
pdm/laboratoare/05.1458511907.txt.gz · Last modified: 2016/03/21 00:11 by alexandru.radovici
CC Attribution-Share Alike 3.0 Unported
www.chimeric.de Valid CSS Driven by DokuWiki do yourself a favour and use a real browser - get firefox!! Recent changes RSS feed Valid XHTML 1.0