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:laborator04 [2015/03/16 01:52]
Andrei Roșu-Cojocaru
laboratoare:laborator04 [2016/03/19 12:36] (current)
Andrei Roșu-Cojocaru
Line 75: Line 75:
 <code xml> <code xml>
 <​activity <​activity
-  android:​name="​ro.pub.cs.systems.pdsd.lab04.MainActivity"​+  android:​name="​ro.pub.cs.systems.eim.lab04.MainActivity"​
   android:​label="​@string/​app_name"​ >   android:​label="​@string/​app_name"​ >
   <​intent-filter>​   <​intent-filter>​
-    <action android:​name="​ro.pub.cs.systems.pdsd.lab04.intent.action.MainActivity"​ />+    <action android:​name="​ro.pub.cs.systems.eim.lab04.intent.action.MainActivity"​ />
     <​category android:​name="​android.intent.category.LAUNCHER"​ />     <​category android:​name="​android.intent.category.LAUNCHER"​ />
   </​intent-filter>​   </​intent-filter>​
Line 99: Line 99:
 </​code>​ </​code>​
   * dacă se dorește rularea unei activități existente în cadrul altei aplicații, aceasta va trebui referită prin numele său complet, inclusiv denumirea pachetului care o identifică ​ <code java>   * dacă se dorește rularea unei activități existente în cadrul altei aplicații, aceasta va trebui referită prin numele său complet, inclusiv denumirea pachetului care o identifică ​ <code java>
-startActivity(new Intent("​ro.pub.cs.systems.pdsd.lab04.AnotherActivity"​));​+startActivity(new Intent("​ro.pub.cs.systems.eim.lab04.AnotherActivity"​));​
 </​code>​ </​code>​
  
Line 117: Line 117:
   * vizualizarea conținutului specificat în secțiunea ''​data''​ asociată intenției, sub forma unui URI, de către aplicații Android diferite, în funcție de schema (protocolul) utilizat (''​http''​ - navigator, ''​tel''​ - aplicația pentru formarea unui număr de telefon, ''​geo''​ - Google Maps, ''​content''​ - aplicația pentru gestiunea contactelor din agenda telefonică):​ <code java>   * vizualizarea conținutului specificat în secțiunea ''​data''​ asociată intenției, sub forma unui URI, de către aplicații Android diferite, în funcție de schema (protocolul) utilizat (''​http''​ - navigator, ''​tel''​ - aplicația pentru formarea unui număr de telefon, ''​geo''​ - Google Maps, ''​content''​ - aplicația pentru gestiunea contactelor din agenda telefonică):​ <code java>
 Intent intent = new Intent(Intent.ACTION_VIEW);​ Intent intent = new Intent(Intent.ACTION_VIEW);​
-intent.setData(Uri.parse("​http://​ocw.cs.pub.ro/​pdsd"));+intent.setData(Uri.parse("​http://​ocw.cs.pub.ro/​eim"));
 </​code>​ </​code>​
   * căutarea unor informații pe Internet folosind un motor de căutare, termenul căutat fiind indicat în secțiunea ''​extra''​ asociată intenției, fiind identificată prin cheia ''​SearchManager.QUERY'':​ <code java>   * căutarea unor informații pe Internet folosind un motor de căutare, termenul căutat fiind indicat în secțiunea ''​extra''​ asociată intenției, fiind identificată prin cheia ''​SearchManager.QUERY'':​ <code java>
Line 252: Line 252:
 <code xml> <code xml>
 <​activity <​activity
-  android:​name="​ro.pub.cs.systems.pdsd.lab04.AnotherActivity"​+  android:​name="​ro.pub.cs.systems.eim.lab04.AnotherActivity"​
   android:​label="​@string/​app_name"​ >   android:​label="​@string/​app_name"​ >
   <​intent-filter>​   <​intent-filter>​
-    <action android:​name="​ro.pub.cs.systems.pdsd.lab04.intent.action.AnotherActivity"​ />+    <action android:​name="​ro.pub.cs.systems.eim.lab04.intent.action.AnotherActivity"​ />
     <​category android:​name="​android.intent.category.DEFAULT"​ />     <​category android:​name="​android.intent.category.DEFAULT"​ />
     <data     <data
Line 292: Line 292:
   super.onCreate(state);​   super.onCreate(state);​
   setContentView(R.layout.activity_main);​   setContentView(R.layout.activity_main);​
-  Intent intent = new Intent("​ro.pub.cs.systems.pdsd.lab04.AnotherActivity"​);​ +  Intent intent = new Intent("​ro.pub.cs.systems.eim.lab04.AnotherActivity"​);​ 
-  intent.putExtra("​ro.pub.cs.systems.pdsd.lab04.someKey",​ someValue);+  intent.putExtra("​ro.pub.cs.systems.pdsd.eim.someKey",​ someValue);
   startActivityForResult(intent,​ ANOTHER_ACTIVITY_REQUEST_CODE);​   startActivityForResult(intent,​ ANOTHER_ACTIVITY_REQUEST_CODE);​
   // start another activities with their own request codes   // start another activities with their own request codes
Line 327: Line 327:
   // intent to parent   // intent to parent
   Intent intentToParent = new Intent();   Intent intentToParent = new Intent();
-  intent.putExtra("​ro.pub.cs.systems.pdsd.lab04.anotherKey",​ anotherValue);​+  intent.putExtra("​ro.pub.cs.systems.eim.lab04.anotherKey",​ anotherValue);​
   setResult(RESULT_OK,​ intentToParent);​   setResult(RESULT_OK,​ intentToParent);​
   finish();   finish();
Line 375: Line 375:
  
 <code java> <code java>
-final public static String SOME_ACTION = "​ro.pub.cs.systems.pdsd.lab04.SomeAction.SOME_ACTION";​+final public static String SOME_ACTION = "​ro.pub.cs.systems.eim.lab04.SomeAction.SOME_ACTION";​
  
 Intent intent = new Intent(SOME_ACTION);​ Intent intent = new Intent(SOME_ACTION);​
-intent.putExtra("​ro.pub.cs.systems.pdsd.lab04.someKey",​ someValue);+intent.putExtra("​ro.pub.cs.systems.eim.lab04.someKey",​ someValue);
 sendBroadcast(intent);​ sendBroadcast(intent);​
 </​code>​ </​code>​
Line 393: Line 393:
       android:​name="​.SomeEventBroadcastReceiver">​       android:​name="​.SomeEventBroadcastReceiver">​
       <​intent-filter>​       <​intent-filter>​
-        <action android:​name="​ro.pub.cs.systems.pdsd.lab04.SomeAction.SOME_ACTION"​ />+        <action android:​name="​ro.pub.cs.systems.eim.lab04.SomeAction.SOME_ACTION"​ />
       </​intent-filter> ​       </​intent-filter> ​
     </​receiver>​     </​receiver>​
Line 450: Line 450:
  
 <code java> <code java>
-final public static String SOME_ORDERED_ACTION = "​ro.pub.cs.systems.pdsd.lab04.SomeOrderedAction.SOME_ORDERED_ACTION";​+final public static String SOME_ORDERED_ACTION = "​ro.pub.cs.systems.eim.lab04.SomeOrderedAction.SOME_ORDERED_ACTION";​
  
 Intent intent = new Intent(SOME_ORDERED_ACTION);​ Intent intent = new Intent(SOME_ORDERED_ACTION);​
-intent.putExtra("​ro.pub.cs.systems.pdsd.lab04.someKey",​ someValue);​ +intent.putExtra("​ro.pub.cs.systems.pdsd.eim.someKey",​ someValue);​ 
-sendOrderedBroadcast(intent,​ "​ro.pub.cs.systems.pdsd.lab04.SOME_PERMISSION"​);​+sendOrderedBroadcast(intent,​ "​ro.pub.cs.systems.pdsd.eim.SOME_PERMISSION"​);​
 </​code>​ </​code>​
  
Line 462: Line 462:
     <​receiver     <​receiver
       android:​name="​.SomeEventOrderedBroadcastReceiver"​       android:​name="​.SomeEventOrderedBroadcastReceiver"​
-      android:​permission="​ro.pub.cs.systems.pdsd.lab04.SOME_PERMISSION">​+      android:​permission="​ro.pub.cs.systems.eim.lab04.SOME_PERMISSION">​
       <​intent-filter       <​intent-filter
         android:​permission="​100">​         android:​permission="​100">​
-        <action android:​name="​ro.pub.cs.systems.pdsd.lab04.SomeOrderedAction.SOME_ORDERED_ACTION"​ />+        <action android:​name="​ro.pub.cs.systems.eim.lab04.SomeOrderedAction.SOME_ORDERED_ACTION"​ />
       </​intent-filter> ​       </​intent-filter> ​
     </​receiver>​     </​receiver>​
Line 479: Line 479:
  
 <code java> <code java>
-final public static String SOME_STICKY_ACTION = "​ro.pub.cs.systems.pdsd.lab04.SomeStickyAction.SOME_STICKY_ACTION";​+final public static String SOME_STICKY_ACTION = "​ro.pub.cs.systems.eim.lab04.SomeStickyAction.SOME_STICKY_ACTION";​
  
 Intent intent = new Intent(SOME_STICKY_ACTION);​ Intent intent = new Intent(SOME_STICKY_ACTION);​
-intent.putExtra("​ro.pub.cs.systems.pdsd.lab04.someKey",​ someValue);+intent.putExtra("​ro.pub.cs.systems.eim.lab04.someKey",​ someValue);
 sendStickyBroadcast(intent);​ sendStickyBroadcast(intent);​
 </​code>​ </​code>​
Line 557: Line 557:
  
 <file java SomeFragment.java>​ <file java SomeFragment.java>​
-package ro.pub.cs.systems.pdsd.lab04;+package ro.pub.cs.systems.eim.lab04;
  
 import android.app.Fragment;​ import android.app.Fragment;​
Line 651: Line 651:
  
 <file java SomeFragment.java>​ <file java SomeFragment.java>​
-package ro.pub.cs.systems.pdsd.lab04;+package ro.pub.cs.systems.eim.lab04;
  
 import android.app.Activity;​ import android.app.Activity;​
Line 758: Line 758:
   tools:​context="​.MainActivity"​ >   tools:​context="​.MainActivity"​ >
   <​fragment   <​fragment
-    android:​name="​ro.pub.cs.systems.pdsd.labo04.Fragment1"​+    android:​name="​ro.pub.cs.systems.eim.labo04.Fragment1"​
     android:​id="​@+id/​fragment1"​     android:​id="​@+id/​fragment1"​
     android:​layout_weight="​1"​     android:​layout_weight="​1"​
Line 764: Line 764:
     android:​layout_height="​wrap_content"​ />     android:​layout_height="​wrap_content"​ />
   <​fragment   <​fragment
-    android:​name="​ro.pub.cs.systems.pdsd.labo04.Fragment2"​+    android:​name="​ro.pub.cs.systems.eim.labo04.Fragment2"​
     android:​id="​@+id/​fragment2"​     android:​id="​@+id/​fragment2"​
     android:​layout_weight="​1"​     android:​layout_weight="​1"​
Line 940: Line 940:
 </​code>​ </​code>​
  
-===== Servicii ​=====+===== Activitate de Laborator ​=====
  
-TODO+Se dorește implementarea unei aplicații Android, conținând o activitate conținând două fragmente, care să ofere utilizatorilor funcționalitatea necesară pentru a stoca un număr de telefon în agenda de contacte, specificând pentru acesta mai multe informații.
  
-===== Activitate de Laborator =====+{{ :​laboratoare:​laborator04:​activitate_de_laborator01.png?​nolink&​300 }}
  
-==== Intenții ==== +{{ :​laboratoare:​laborator04:​activitate_de_laborator02.png?​nolink&​300 }}
-  - Să se creeze încă o fereastră (activitate) pe care să se afișeze o imagine. Aceasta trebuie să apară pe ecran în momentul în care se apasă butonul //​Fereastră Nouă//. +
-  - Să se adauge la fereastra creată anterior un buton de revenire. +
-  - Să se afișeze fereastra creată anterior și atunci când se apasă butonul //Inserați Fereastra//​. Să se afișeze sub imagine, într-un câmp text, care a fost butonul ce a determinat invocarea ferestrei. +
-  - Să se adauge la fereastra creată anterior un buton prin intermediul căruia să se schimbe imaginea existentă cu o alta.+
  
-==== Fragmente ==== +**1.** În contul Github personal, să se creeze un depozit denumit '​Laborator04'​. Acesta trebuie să conțină unui fișier ''​README.md'',​ un fișier ''​.gitignore''​ specific unei aplicații Android și un fișier ''​LICENSE''​ care să descrie condițiile pentru utilizarea aplicației. 
-  ​- ​Să se plaseze ​conținutul ​celor două ferestre create anterior ​în două fragmente ​aparținând aceleiașactivitățiafișându-se simultan ​pe ecran+ 
-  ​Să se adauge ​un două butoane ​în cadrul primului ​fragment ​pentru ​atașarea, respectiv ​detașarea ​celui de-al doilea fragment ​de la activitate.+**2.** ​Să se cloneze într-un director de pe discul local conținutul ​depozitului la distanță astfel creat. În urma acestei operații, directorul Laborator04 va trebui să se conțină fișierele ''​README.md'',​ ''​.gitignore''​ care indică tipurile de fișiere (extensiile) ignorate și ''​LICENSE''​. <​code>​ 
 +student@eim2016:​~$ git clone https://​www.github.com/​perfectstudent/​Laborator04 
 +</​code>​ 
 + 
 +**3.** În directorul Laborator04 de pe discul local, să se creeze un proiect Eclipse denumit //​ContactsManager//​. 
 + 
 +Se utilizează următoarele detalii ale proiectului:​ 
 +  * **Application Name** - //Contacts Manager// 
 +  * **Project Name** - //​ContactsManager//​ 
 +  * **Package Name** - ''​ro.pub.cs.systems.eim.lab04.contactsmanager''​ 
 +  * **Minimum Required SDK** - API 16: Android 4.1 (Jelly Bean) 
 +  * **Target SDK** - API 16: Android 4.1 (Jelly Bean) 
 +  * **Compile With** - API 16: Android 4.1 (Jelly Bean) 
 +  * **Theme** - Holo Light with Dark Action Bar 
 + 
 +Ceilalți parametrii de configurare sunt impliciți:​ 
 +  * denumirea activității - ''​ContactsManagerActivity'';​ 
 +  * denumirea fișierului XML din ''​res/​layout''​ în care va fi construită interfața grafică - ''​activity_contacts_manager''​. 
 + 
 +**4.** În fișierul ''​activity_contacts_manager''​ din directorul ''​res/​layout''​ să se construiască interfața grafică folosind: 
 +  * editorul vizual (//​Graphical Layout//) 
 +  * editorul XML (manual) 
 + 
 +Acesta va fi format din două containere de tip ''​FrameLayout'' ​în care vor fi plasate fragmentele,​ dispuse vertical. 
 + 
 +**5.** Să se definească ​două fragmente
 +  * ''​BasicDetailsFragment''​ cu interfața grafică în fișierul ''​fragment_basic_details.xml''​ din directorul ''​res/​layout'';​ acesta va fi afișat în permanență în cadrul ​activității (pe metoda ''​onCreate()''​ a acesteia se adaugă o instanță a fragmentului la containerul ​ <code java> 
 +FragmentManager fragmentManager = getFragmentManager();​ 
 +FragmentTransaction fragmentTransaction = fragmentManager.beginTransaction();​ 
 +fragmentTransaction.add(R.id.containerTopnew BasicDetailsFragment());​ 
 +fragmentTransaction.commit();​ 
 +</​code>​ 
 +  * ''​AdditionalDetailsFragment''​ cu interfața grafică în fișierul ''​fragment_additional_details.xml''​ din directorul ''​res/​layout'';​ acesta va fi atașat / detașat la activitate la accesarea butonului //Show Additional Fields//, respectiv //Hide Additional Fields//. 
 + 
 +O clasă asociată unui fragment este derivată din ''​android.app.Fragment''​ și implementează metoda ''​onCreateView()'' ​pe care se încarcă interfața grafică corespunzătoare:​ 
 + 
 +<code java> 
 +public class SomeFragment extends Fragment { 
 +  @Override 
 +  public View onCreateView(LayoutInflater layoutInflater,​ ViewGroup container, Bundle state) { 
 +    return layoutInflater.inflate(R.layout.fragment_some,​ container, false); 
 +  ​
 +
 +</​code>​ 
 + 
 +**6**. ​Să se implementeaze intefețele grafice ale fragmentelor,​ conținând următoarele controale:​ 
 +  * ''​fragment_basic_details.xml''​ conține mai multe elemente dispuse vertical și ocupând pe lățime întregul spațiu avut la dispoziție:​ 
 +    * un buton (''​Button''​) având mesajul //Show Additional Fields// în cazul în care celălalt fragment nu este afișat, respectiv mesajul //Hide Additional Fields// ​în cazul în care celălalt ​fragment ​este afișat, determinând ​atașarea ​detașarea ​acestuia la activitate;​ 
 +    * patru controale ​de tip câmpuri text (''​EditText''​) prin care se introduc: 
 +      * numele; 
 +      * numărul de telefon ​acest câmp este dezactivat (are proprietatea ''​android:​enabled="​false"''​),​ urmând ca valoarea sa să fie preluată din câmpul ''​extra'' ​al unei intenții;​ 
 +      * adresa electronică;​ 
 +      * adresa poștală. 
 +  * ''​fragment_additional_details.xml''​ conține patru controale ​de tip câmpuri text dispuse vertical și ocupând pe lățime întregul spațiu avut la dispoziție,​ prin care se introduc: 
 +    * poziția ocupată; 
 +    * denumirea companiei;​ 
 +    * site-ul web; 
 +    * identificatorul pentru mesagerie instantanee. 
 + 
 +**7.** Să se implementeaze interacțiunea cu utilizatorul a aplicației.  
 +  * în metoda ''​onActivityCreated()''​ a fragmentului ''​BasicDetailsFragment''​ se obțin referințe către butoanele //Show Additional Details// / //Hide Additional Details//, respectiv //Save// și //Cancel// prin intermediul metodei ''​getActivity().findViewById(R.id....)'';​ 
 +  * se implementează o clasă ascultător pentru butoane, care implementează ''​View.OnClickListener''​ și (re)definește metoda ''​onClick(View v)'';​ în funcție de identificatorul butonului care este transmis ca parametru al metodei, sunt realizate următoarele acțiuni: 
 +    * butonul //Show Additional Details// / //Hide Additional Details// - atașează / detașează fragmentul ''​AdditionalDetailsFragment'' ​la activitate ​în funcție de existența / inexistența acestuia, modificând corespunzător textul afișat pe buton: <​code>​ 
 +FragmentManager fragmentManager = getActivity().getFragmentManager();​ 
 +FragmentTransaction fragmentTransaction = fragmentManager.beginTransaction();​ 
 +AdditionalDetailsFragment additionalDetailsFragment = (AdditionalDetailsFragment)fragmentManager.findFragmentById(R.id.containerBottom);​ 
 +if (additionalDetailsFragment == null) { 
 +  fragmentTransaction.add(R.id.containerBottom,​ new AdditionalDetailsFragment());​ 
 +  ((Button)v).setText(getActivity().getResources().getString(R.string.hide_additional_fields));​ 
 +  fragmentTransaction.setTransition(FragmentTransaction.TRANSIT_ENTER_MASK);​ 
 +} else { 
 +  fragmentTransaction.remove(additionalDetailsFragment);​ 
 +  ((Button)v).setText(getActivity().getResources().getString(R.string.show_additional_fields));​ 
 +  fragmentTransaction.setTransition(FragmentTransaction.TRANSIT_EXIT_MASK);​ 
 +
 +fragmentTransaction.commit();​ 
 +</​code>​ 
 +    * butonul //Save// - lansează în execuție aplicația Android nativă pentru stocarea unui contact în agenda telefonică,​ după ce în prealabil au fost preluate informațiile din controalele grafice: <code java> 
 +Intent intent = new Intent(ContactsContract.Intents.Insert.ACTION);​ 
 +intent.setType(ContactsContract.RawContacts.CONTENT_TYPE);​ 
 +if (name != null) { 
 +  intent.putExtra(ContactsContract.Intents.Insert.NAME,​ name); 
 +
 +if (phone != null) { 
 +  intent.putExtra(ContactsContract.Intents.Insert.PHONE,​ phone); 
 +
 +if (email != null) { 
 +  intent.putExtra(ContactsContract.Intents.Insert.EMAIL,​ email); 
 +
 +if (address != null) { 
 +  intent.putExtra(ContactsContract.Intents.Insert.POSTAL,​ address); 
 +
 +if (jobTitle != null) { 
 +  intent.putExtra(ContactsContract.Intents.Insert.JOB_TITLE,​ jobTitle);​ 
 +
 +if (company != null) { 
 +  intent.putExtra(ContactsContract.Intents.Insert.COMPANY,​ company); 
 +
 +ArrayList<​ContentValues>​ contactData = new ArrayList<​ContentValues>​();​ 
 +if (website != null) { 
 +  ContentValues websiteRow = new ContentValues();​ 
 +  websiteRow.put(ContactsContract.Data.MIMETYPE,​ ContactsContract.CommonDataKinds.Website.CONTENT_ITEM_TYPE);​ 
 +  websiteRow.put(ContactsContract.CommonDataKinds.Website.URL,​ website); 
 +  contactData.add(websiteRow);​ 
 +
 +if (im != null) { 
 +  ContentValues imRow = new ContentValues();​ 
 +  imRow.put(ContactsContract.Data.MIMETYPE,​ ContactsContract.CommonDataKinds.Im.CONTENT_ITEM_TYPE);​ 
 +  imRow.put(ContactsContract.CommonDataKinds.Im.DATA,​ im); 
 +  contactData.add(imRow);​ 
 +
 +intent.putParcelableArrayListExtra(ContactsContract.Intents.Insert.DATA,​ contactData);​ 
 +getActivity().startActivity(intent);​ 
 +</​code>​ Intenția pentru realizarea acestei operații are asociată acțiunea ''​ContactsContract.Intents.Insert.ACTION''​ și tipul ''​ContactsContract.RawContacts.CONTENT_TYPE''​. Informațiile care se doresc a fi completate sunt atașate în câmpul ''​extra''​ al acesteia, având cheile:\\ ✔ ''​ContactsContract.Intents.Insert.NAME'';​\\ ✔ ''​ContactsContract.Intents.Insert.PHONE'';​\\ ✔ ''​ContactsContract.Intents.Insert.EMAIL'';​\\ ✔ ''​ContactsContract.Intents.Insert.POSTAL'';​\\ ✔ ''​ContactsContract.Intents.Insert.JOB_TITLE'';​\\ ✔ ''​ContactsContract.Intents.Insert.COMPANY'';​\\ Pentru site-ul web și identificatorul de mesagerie instantanee,​ se folosește un tablou de elemente ''​ContentValues''​ în care se specifică înregistrări de tipul ''​CommonDataKinds.Website.URL'',​ respectiv ''​CommonDataKinds.Im.DATA'';​\\ Pentru a putea gestiona agenda telefonică,​ este necesar ca în fișierul ''​AndroidManifest.xml''​ să fie specificate următoarele permisiuni: <code xml> 
 +<​uses-permission 
 +  android:​name="​android.permission.READ_CONTACTS"​ /> 
 +<​uses-permission 
 +  android:​name="​android.permission.WRITE_CONTACTS"​ /> 
 +</​code>​ 
 +    * butonul //Cancel// - termină aplicația Android: <code java> 
 +getActivity().finish();​ 
 +</​code>​ 
 +  * se înregistrează o instanță a clasei ascultător ca mecanism de tratare a evenimentelor de tip accesare a butoanelor din cadrul interfeței grafice, prin apelul metodei ''​setOnClickListener()''​. 
 + 
 +**8.** Să se modifice aplicația Android [[https://​github.com/​eim2016/​Laborator03.git|Phone Dialer]] astfel încât să conțină un buton suplimentar prin care este invocată aplicația //Contacts Manager// căreia îi transmite numărul de telefon format și așteptând un rezultat cu privire la stocarea contactului în agenda telefonică. 
 + 
 +{{ :​laboratoare:​laborator04:​activitate_de_laborator03.png?​nolink&​300 }} 
 + 
 +{{ :​laboratoare:​laborator04:​activitate_de_laborator04.png?​nolink&​500 }} 
 + 
 +Metoda de tratare a evenimentului de tip accesare a butonului de stocare a numărului de telefon în agenda telefonică invocă o intenție asociată aplicației //Contacts Manager//, transmițând și numărul de telefon în câmpul ''​extra''​ asociat acesteia, identificabil prin intermediul unei chei. <code java> 
 +if (phoneNumber.length() > 0) { 
 +  intent = new Intent("​ro.pub.cs.systems.eim.lab04.contactsmanager.intent.action.ContactsManagerActivity"​);​ 
 +  intent.putExtra("​ro.pub.cs.systems.eim.lab04.contactsmanager.PHONE_NUMBER_KEY",​ phoneNumber);​ 
 +  startActivityForResult(intent,​ Constants.CONTACTS_MANAGER_REQUEST_CODE);​ 
 +} else { 
 +  Toast.makeText(getApplication(),​ getResources().getString(R.string.phone_error),​ Toast.LENGTH_LONG).show();​ 
 +
 +</​code>​ 
 + 
 +**9.** Să se modifice aplicația Android //Contacts Manager// astfel încât să poată fi lansată în execuție doar din contextul altei activități,​ prin intermediul unei intenții care conține în câmpul ''​extra''​ un număr de telefon, identificabil prin cheia ''​ro.pub.cs.systems.eim.lab04.contactsmanager.PHONE_NUMBER_KEY'',​ acesta fiind plasat în câmpul text needitabil corespunzător. Totodată, va transmite înapoi rezultatul operației de stocare (''​Activity.RESULT_OK''​ sau ''​Activity.RESULT_CANCELED''​). 
 + 
 +  * în fișierul ''​AndroidManifest.xml''​ se modifică filtrul de intenții (acțiunea și categoria), astfel încât activitatea să poată fi rulată doar prin intermediul unei intenții <file xml AndroidManifest.xml>​ 
 +<​manifest ...> 
 +  <​application ...> 
 +    <​activity 
 +      android:​name="​.graphicuserinterface.ContactsManagerActivity"​ 
 +      android:​label="​@string/​app_name"​ > 
 +      <​intent-filter>​ 
 +        <action android:​name="​ro.pub.cs.systems.eim.lab04.contactsmanager.intent.action.ContactsManagerActivity"​ /> 
 +        <​category android:​name="​android.intent.category.DEFAULT"​ /> 
 +      </​intent-filter>​ 
 +    </​activity>​ 
 +  </​application>​ 
 +</​manifest>​ 
 +</​file>​ 
 +  * în metoda ''​onActivityCreated()''​ asociată fragmentului ''​BasicDetailsFragment''​ este verificată intenția cu care este pornită activitatea părinte, și în cazul în care aceasta nu este nulă, este preluată informația din secțiunea ''​extra'',​ identificată prin cheia ''​ro.pub.cs.systems.eim.lab04.contactsmanager.PHONE_NUMBER_KEY'',​ conținutul său fiind plasat în cadrul câmpului text corespunzător:​ <code java> 
 +if (intent != null) { 
 +  String phone = intent.getStringExtra("​ro.pub.cs.systems.eim.lab04.contactsmanager.PHONE_NUMBER_KEY"​);​ 
 +  if (phone != null) { 
 +    phoneEditText.setText(phone);​ 
 +  } else { 
 +    Activity activity = getActivity();​ 
 +    Toast.makeText(activity,​ activity.getResources().getString(R.string.phone_error),​ Toast.LENGTH_LONG).show();​ 
 +  } 
 +}  
 +</​code>​ 
 +  * pe metodele de tratare a evenimentelor de accesare a butoanelor:​ 
 +    * //Save// - este lansată în execuție aplicația nativă pentru gestiunea agendei telefonice, folosind un cod de cerere prin intermediul căruia se va verifica rezultatul furnizat: <code java> 
 +getActivity().startActivityForResult(intent,​ Constants.CONTACTS_MANAGER_REQUEST_CODE);​ 
 +</​code>​ 
 +    * //Cancel// - se transmite înapoi rezultatul <code java> 
 +getActivity().setResult(Activity.RESULT_CANCELED,​ new Intent());​ 
 +</​code>​ 
 + 
 +  * în metoda ''​onActivityResult()''​ asociată activității ''​ContactsManagerActivity'',​ în momentul în care s-a părăsit aplicația nativă pentru gestiunea agendei telefonice, se verifică codul de cerere și se transmite înapoi un rezultat: <code java> 
 +public void onActivityResult(int requestCode,​ int resultCode, Intent intent) { 
 +switch(requestCode) { 
 +  case Constants.CONTACTS_MANAGER_REQUEST_CODE:​ 
 +    setResult(resultCode,​ new Intent());​ 
 +    finish(); 
 +    break; 
 +  } 
 +
 +</​code>​ 
 + 
 +**10.** ​ Să se încarce modificările realizate în cadrul depozitului '​Laborator04'​ de pe contul Github personal, folosind un mesaj sugestiv. <​code>​ 
 +student@eim2016:​~/​Laborator04$ git add * 
 +student@eim2016:​~/​Laborator04$ git commit -m "​implemented taks for laboratory 04" 
 +student@eim2016:​~/​Laborator04$ git push origin master 
 +</​code>​
  
 ===== Resurse Utile ===== ===== Resurse Utile =====
laboratoare/laborator04.1426463542.txt.gz · Last modified: 2016/02/09 11:19 (external edit)
CC Attribution-Share Alike 3.0 Unported
Driven by DokuWiki Recent changes RSS feed Valid CSS Valid XHTML 1.0