Differences

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

Link to this comparison view

eim:laboratoare:laborator10 [2017/05/08 22:44]
andrei.rosucojocaru [Dispozitiv Virtual]
eim:laboratoare:laborator10 [2020/03/19 09:19] (current)
madalina.barbu [Activitate de Laborator]
Line 3: Line 3:
 Datele cu privire la localizare îmbunătățesc experiența utilizatorului,​ întrucât unele informații furnizate de aplicații pot fi contextualizate în funcție de regiunea în care acesta se găsește în mod curent. O astfel de oportunitate poate fi exploatată cu atât mai mult în cadrul dispozitivelor mobile, care dispun de componente specializate pentru determinarea automată a poziției geografice curente (senzor pentru GPS, folosirea informațiilor furnizate de celula de telefonie mobilă). Datele cu privire la localizare îmbunătățesc experiența utilizatorului,​ întrucât unele informații furnizate de aplicații pot fi contextualizate în funcție de regiunea în care acesta se găsește în mod curent. O astfel de oportunitate poate fi exploatată cu atât mai mult în cadrul dispozitivelor mobile, care dispun de componente specializate pentru determinarea automată a poziției geografice curente (senzor pentru GPS, folosirea informațiilor furnizate de celula de telefonie mobilă).
  
-În cadrul SDK-ului Android, sunt implementate API-uri pentru proiectarea și dezvoltarea unor aplicații care pun la dispoziția utilizatorilor informații cu privire la **locația în care se află**, disponibile prin intermediul unor metode, fără a fi necesară interacțiunea propriu-zisă cu componentele responsabile cu determinarea acestor date. Totodată, există posibilitatea de a identifica **punctele de interes** care se găsesc în proximitatea utilizatorului,​ la un moment dat de timp.+În cadrul SDK-ului Android, sunt implementate API-uri pentru proiectarea și dezvoltarea unor aplicații care pun la dispoziția utilizatorilor informații cu privire la **locația în care se află**, disponibile prin intermediul unor metode, fără a fi necesară interacțiunea propriu-zisă cu componentele responsabile cu determinarea acestor date. Totodată, există posibilitatea de a identifica **punctele de interes** care se găsesc în proximitatea utilizatorului,​ la un moment dat
 + 
 +Există și alte [[https://​blog.rapidapi.com/​top-map-apis/​|API-uri]] pentru localizare, geoconding, hărți, indicații de navigație, fiecare cu avantajele și dezavantajele asociate. În acest laborator se vor folosi serviciile Google, care sunt cotate printre cele mai rapide, diverse, dar și scumpe pentru volum mare de apeluri 
  
 Astfel, funcționalitățile oferite pentru dezvoltatori sunt: Astfel, funcționalitățile oferite pentru dezvoltatori sunt:
Line 48: Line 51:
  
   * Credențialele pot fi obținute:   * Credențialele pot fi obținute:
-    *  prin accesarea butonului //Google Maps Android API// → //Create credentials//,​ care implică următoarele etape:\\ {{ :​eim:​laboratoare:​laborator10:​configurare03new.png?​nolink }}\\ **1.** indicarea tipului de API folosit (în cazul de față //Google Maps Android API//)\\ {{ :​eim:​laboratoare:​laborator10:​configurare04new.png?​nolink }}\\ **2.** generarea (automată) propriu-zisă a cheii, urmată de apăsarea butonului \\Done\\;\\ {{ :​eim:​laboratoare:​laborator10:​configurare05new.png?​nolink }}\\ În secțiunea //​Credentials//​ va putea fi vizualizată cheia creată, împreună cu denumirea sa. Pentru cheile care nu sunt restricționate,​ va fi vizibil semnul :!: care indică faptul că aceasta poate fi utilizată din orice context, ceea ce poate implica o breșă de securitate\\ {{ :​eim:​laboratoare:​laborator10:​configurare06new.png?​nolink }}\\ Prin accesarea cheii respective, aceasta poate fi restricționată în sensul în care se precizează **contextul în care este folosită cheia** (în cazul de față, aplicații Android - //Android apps//), **denumirea pachetului corespunzător aplicației Android din care cheia respectivă poate fi folosită** precum și **certificatul digital SHA-1 corespunzător mașinii de pe care este instalată aplicația Android pe dispozitivul mobil**\\ ​se va indica și comanda care va trebui rulată pentru generarea certificatului digital respectiv; folosind utilitarul Java ''​keytool'',​ se generează semnătura digitală a mașinii de pe care se va dezvolta aplicația Android (pentru a putea utiliza acest utilitar, calea căte Java trebuie să se găsească în variabila de mediu ''​$PATH'',​ respectiv ''​%PATH''​).\\ Linux <​code>​ +    *  prin accesarea butonului //Google Maps Android API// → //Create credentials//,​ care implică următoarele etape:\\ {{ :​eim:​laboratoare:​laborator10:​configurare03new.png?​nolink&​800 ​}}\\ **1.** indicarea tipului de API folosit (în cazul de față //Google Maps Android API//)\\ {{ :​eim:​laboratoare:​laborator10:​configurare04new.png?​nolink }}\\ **2.** generarea (automată) propriu-zisă a cheii, urmată de apăsarea butonului \\Done\\;\\ {{ :​eim:​laboratoare:​laborator10:​configurare05new.png?​nolink }}\\ În secțiunea //​Credentials//​ va putea fi vizualizată cheia creată, împreună cu denumirea sa. Pentru cheile care nu sunt restricționate,​ va fi vizibil semnul :!: care indică faptul că aceasta poate fi utilizată din orice context, ceea ce poate implica o breșă de securitate\\ {{ :​eim:​laboratoare:​laborator10:​configurare06new.png?​nolink }}\\ Prin accesarea cheii respective, aceasta poate fi restricționată în sensul în care se precizează **contextul în care este folosită cheia** (în cazul de față, aplicații Android - //Android apps//), **denumirea pachetului corespunzător aplicației Android din care cheia respectivă poate fi folosită** precum și **certificatul digital SHA-1 corespunzător mașinii de pe care este instalată aplicația Android pe dispozitivul mobil**.\\ Se va indica și comanda care va trebui rulată pentru generarea certificatului digital respectiv; folosind utilitarul Java ''​keytool'',​ se generează semnătura digitală a mașinii de pe care se va dezvolta aplicația Android (pentru a putea utiliza acest utilitar, calea căte Java trebuie să se găsească în variabila de mediu ''​$PATH'',​ respectiv ''​%PATH''​).\\ Linux <​code>​ 
-student@eim2017:~$ export PATH=$PATH:/​usr/​local/​java/​jdk1.8.0_131/​bin +student@eg-106:~$ export PATH=$PATH:/​usr/​local/​java/​jdk1.8.0_131/​bin 
-student@eim2017:~$ keytool -list -v -keystore ~/​.android/​debug.keystore -alias androiddebugkey -storepass android -keypass android+student@eg-106:~$ keytool -list -v -keystore ~/​.android/​debug.keystore -alias androiddebugkey -storepass android -keypass android
 </​code>​\\ Windows <​code>​ </​code>​\\ Windows <​code>​
 C:​\Users\Student>​ set PATH=%PATH%;​C:​\Program Files\Java\jdk_1.8.0_131\bin C:​\Users\Student>​ set PATH=%PATH%;​C:​\Program Files\Java\jdk_1.8.0_131\bin
Line 89: Line 92:
  
   * Linux <​code>​   * Linux <​code>​
-student@eim2017:~$ cd /​opt/​android-sdk-linux/​tools +student@eg-106:~$ cd /​opt/​android-sdk-linux/​tools 
-student@eim2017:/​opt/​android-sdk-linux/​tools$ sudo ./android+student@eg-106:/​opt/​android-sdk-linux/​tools$ sudo ./android
 </​code>​ </​code>​
   * Windows - se deschide un terminal cu drepturi de administrator <​code>​   * Windows - se deschide un terminal cu drepturi de administrator <​code>​
Line 256: Line 259:
 {{ :​eim:​laboratoare:​laborator10:​avd_configuration.png?​nolink&​600 }} {{ :​eim:​laboratoare:​laborator10:​avd_configuration.png?​nolink&​600 }}
  
-Controlul poziției curente poate fi realizat prin intermediul perspectivei //Android Debug Monitor// din Android Studio ​sau //DDMS// din Eclipse (//Window// → //Open Perspective//​ → //DDMS//), unde, în secțiunea //Emulator Control// → //Location Control// se stabilesc valorile pentru latitudine și longitudine (în panoul //Manual//, în format decimal sau sexagesimal),​ după care se apasă butonul //Send//. Informații cu privire la locațiile disponibile pot fi precizate și sub forma unor fișiere gpx sau kml, care pot fi încărcate.+Controlul poziției curente poate fi realizat prin intermediul perspectivei //Android Debug Monitor// din Android Studio, unde, în secțiunea //Emulator Control// → //Location Control// se stabilesc valorile pentru latitudine și longitudine (în panoul //Manual//, în format decimal sau sexagesimal),​ după care se apasă butonul //Send//. Informații cu privire la locațiile disponibile pot fi precizate și sub forma unor fișiere gpx sau kml, care pot fi încărcate.
  
-{{ :​eim:​laboratoare:​laborator10:​avd_emulator_control_new.png?​nolink&​600 ​}}+{{ :​eim:​laboratoare:​laborator10:​avd_emulator_control_new.png?​nolink }}
  
 ===== Gestiunea unei Hărți Google ===== ===== Gestiunea unei Hărți Google =====
Line 292: Line 295:
  
 if (googleMap == null) { if (googleMap == null) {
-  ​if (googleMap == null) { +  ((MapFragment)getFragmentManager().findFragmentById(R.id.google_map)).getMapAsync(new OnMapReadyCallback() { 
-    ​((MapFragment)getFragmentManager().findFragmentById(R.id.google_map)).getMapAsync(new OnMapReadyCallback() { +    @Override 
-      @Override +    public void onMapReady(GoogleMap readyGoogleMap) { 
-      public void onMapReady(GoogleMap readyGoogleMap) { +      googleMap = readyGoogleMap;​ 
-        googleMap = readyGoogleMap;​ +    
-      +  });
-    }); +
-  }+
 } }
 </​code>​ </​code>​
Line 627: Line 628:
 Informațiile de interes sunt starea referitoare la transmiterea actualizărilor periodice, respectiv la cea mai recentă locație. Informațiile de interes sunt starea referitoare la transmiterea actualizărilor periodice, respectiv la cea mai recentă locație.
  
-===== Codificare Geografică Inversă (Geocoding) ===== 
  
 +===== Codificare Geografică Inversă (Geocoding),​ opțional =====
 +
 +Acest exercițiu este opțional, cere activarea facturării (Billing) în contul google pentru care activati Geocoding API.  ​
 +<​spoiler>​
 În Android, clasa [[http://​developer.android.com/​reference/​android/​location/​Geocoder.html|Geocoder]] permite realizarea de conversii dintre coordonate GPS (latitudine / longitudine) și adresa poștală, operație denumită codificare geografică inversă. În Android, clasa [[http://​developer.android.com/​reference/​android/​location/​Geocoder.html|Geocoder]] permite realizarea de conversii dintre coordonate GPS (latitudine / longitudine) și adresa poștală, operație denumită codificare geografică inversă.
  
Line 775: Line 779:
 } }
 </​code>​ </​code>​
 +
 +</​spoiler>​
  
 ===== Implementarea Zonelor de Restricție Geografică (Geofencing) ===== ===== Implementarea Zonelor de Restricție Geografică (Geofencing) =====
Line 1053: Line 1059:
 **2.** În contul Github personal, să se creeze un depozit denumit '​Laborator10'​. 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.** În contul Github personal, să se creeze un depozit denumit '​Laborator10'​. 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''​).
  
-**3.** Să se cloneze în directorul de pe discul local conținutul depozitului la distanță de la [[https://​www.github.com/​eim2017/​Laborator10|]]. ​+**3.** Să se cloneze în directorul de pe discul local conținutul depozitului la distanță de la [[https://​www.github.com/​eim-lab/​Laborator10|]]. ​
  
 În urma acestei operații, directorul Laborator10 va trebui să se conțină directoarele ''​labtasks''​ și ''​solutions''​. ​ În urma acestei operații, directorul Laborator10 va trebui să se conțină directoarele ''​labtasks''​ și ''​solutions''​. ​
  
 <​code>​ <​code>​
-student@eim2017:~$ git clone https://www.github.com/eim2017/​Laborator10.git+student@eg-106:~$ git clone https://​github.com/​eim-lab/​Laborator10.git
 </​code>​ </​code>​
  
 **4.** Să se încarce conținutul descărcat în cadrul depozitului '​Laborator10'​ de pe contul Github personal. <​code>​ **4.** Să se încarce conținutul descărcat în cadrul depozitului '​Laborator10'​ de pe contul Github personal. <​code>​
-student@eim2017:~$ cd Laborator10 +student@eg-106:~$ cd Laborator10 
-student@eim2017:​~/​Laborator10$ git remote add Laborator10_perfectstudent https://​github.com/​perfectstudent/​Laborator10 +student@eg-106:​~/​Laborator10$ git remote add Laborator10_perfectstudent https://​github.com/​perfectstudent/​Laborator10 
-student@eim2017:​~/​Laborator10$ git push Laborator10_perfectstudent master+student@eg-106:​~/​Laborator10$ git push Laborator10_perfectstudent master
 </​code>​ </​code>​
  
Line 1071: Line 1077:
   * în cazul în care se utilizează un dispozitiv fizic, acesta trebuie să ruleze un sistem de operare Android cu o versiune ulterioară 2.2, având asociat un cont Google.   * în cazul în care se utilizează un dispozitiv fizic, acesta trebuie să ruleze un sistem de operare Android cu o versiune ulterioară 2.2, având asociat un cont Google.
  
-**6.** Să se importe în mediul integrat de dezvoltare ​preferat (Android Studio ​sau Eclipse) proiectele ​''​GoogleMapsPlaces'' ​și ''​google-play-service_lib''​ (doar pentru Eclipse) ​din directorul ''​labtasks''​.+**6.** Să se importe în mediul integrat de dezvoltare Android Studio ​proiectul ​''​GoogleMapsPlaces''​ din directorul ''​labtasks''​.
  
 Se dorește să se implementeze o aplicație care să navigheze către o locație specificată prin intermediul coordonatelor GPS (latitudine / longitudine) și pentru care se dorește plasarea unui reper pe hartă, însoțit de o denumire. Se dorește să se implementeze o aplicație care să navigheze către o locație specificată prin intermediul coordonatelor GPS (latitudine / longitudine) și pentru care se dorește plasarea unui reper pe hartă, însoțit de o denumire.
Line 1101: Line 1107:
   - se șterg toate reperele din lista de locații (''​places''​),​ notificându-se și adaptorul corespunzător obiectului de tip ''​Spinner''​ (''​placesAdapter''​) de această modificare, astfel încât acesta să fie actualizat corespunzător.   - se șterg toate reperele din lista de locații (''​places''​),​ notificându-se și adaptorul corespunzător obiectului de tip ''​Spinner''​ (''​placesAdapter''​) de această modificare, astfel încât acesta să fie actualizat corespunzător.
  
-**7.** Să se importe în mediul integrat de dezvoltare ​preferat (Android Studio ​sau Eclipse) proiectele ​''​GoogleMapsLocationUpdate'' ​și ''​google-play-service_lib''​ (doar pentru Eclipse) ​din directorul ''​labtasks''​.+**7.** Să se importe în mediul integrat de dezvoltare Android Studio ​proiectul ​''​GoogleMapsLocationUpdate''​ din directorul ''​labtasks''​.
  
 Se dorește să se implementeze o aplicație pentru care să se implementeze posibilitatea de actualizare periodică a poziției curente pe hartă, în funcție de starea unui buton, prin care se controlează pornirea / oprirea acestui serviciu. Se dorește să se implementeze o aplicație pentru care să se implementeze posibilitatea de actualizare periodică a poziției curente pe hartă, în funcție de starea unui buton, prin care se controlează pornirea / oprirea acestui serviciu.
Line 1141: Line 1147:
   - se activează controalele grafice ''​latitudeEditText'',​ ''​longitudeEditText'',​ ''​navigateToLocationButton'',​ acestea având un conținut vid.   - se activează controalele grafice ''​latitudeEditText'',​ ''​longitudeEditText'',​ ''​navigateToLocationButton'',​ acestea având un conținut vid.
  
-**8.** Să se importe în mediul integrat de dezvoltare ​preferat (Android Studio ​sau Eclipse) proiectele ​''​GoogleMapsGeocoding'' ​și  ''​google-play-service_lib''​ (doar pentru Eclipse) ​din directorul ''​labtasks''​.+**8.** ​(opțional - necesită Billing pentru Geocoding API)  
 +<​spoiler>​ 
 +Să se importe în mediul integrat de dezvoltare Android Studio ​proiectul ​''​GoogleMapsGeocoding''​ din directorul ''​labtasks''​.
  
 Se dorește să se implementeze o aplicație care să realizeze procesul de codificare geografică inversă: dându-se un set de coordonate GPS, se dorește să se determine adresa poștală corespunzătoare. Se dorește să se implementeze o aplicație care să realizeze procesul de codificare geografică inversă: dându-se un set de coordonate GPS, se dorește să se determine adresa poștală corespunzătoare.
Line 1160: Line 1168:
     - un rând de la o anumită poziție se obține prin intermediul metodei ''​getAddressLine()'';​     - un rând de la o anumită poziție se obține prin intermediul metodei ''​getAddressLine()'';​
   - se transmite rezultatul către activitatea principală (se apelează metoda ''​handleResult()''​ cu codul numeric de rezultat (''​Constants.RESULT_SUCCESS'',​ ''​Constants.RESULT_FAILURE''​) și rezultatul obținut, respectiv mesajul de eroare, după caz.   - se transmite rezultatul către activitatea principală (se apelează metoda ''​handleResult()''​ cu codul numeric de rezultat (''​Constants.RESULT_SUCCESS'',​ ''​Constants.RESULT_FAILURE''​) și rezultatul obținut, respectiv mesajul de eroare, după caz.
 +</​spoiler>​
  
-**9.** Să se importe în mediul integrat de dezvoltare ​preferat (Android Studio ​sau Eclipse) proiectele ​''​GoogleMapsGeofencing'' ​și  ''​google-play-service_lib''​ (doar pentru Eclipse) ​din directorul ''​labtasks''​.+**9.** Să se importe în mediul integrat de dezvoltare Android Studio ​proiectul ​''​GoogleMapsGeofencing''​ din directorul ''​labtasks''​.
  
 Se dorește să se implementeze o aplicație care să monitorizeze activitatea unui dispozitiv mobil raportat la o zonă de restricție geografică. ​ Se dorește să se implementeze o aplicație care să monitorizeze activitatea unui dispozitiv mobil raportat la o zonă de restricție geografică. ​
Line 1199: Line 1208:
  
 **10.** Să se încarce modificările realizate în cadrul depozitului '​Laborator10'​ de pe contul Github personal, folosind un mesaj sugestiv. <​code>​ **10.** Să se încarce modificările realizate în cadrul depozitului '​Laborator10'​ de pe contul Github personal, folosind un mesaj sugestiv. <​code>​
-student@eim2017:​~/​Laborator10$ git add * +student@eg-106:​~/​Laborator10$ git add * 
-student@eim2017:​~/​Laborator10$ git commit -m "​implemented taks for laboratory 10" +student@eg-106:​~/​Laborator10$ git commit -m "​implemented taks for laboratory 10" 
-student@eim2017:​~/​Laborator10$ git push Laborator10_perfectstudent master+student@eg-106:​~/​Laborator10$ git push Laborator10_perfectstudent master
 </​code>​ </​code>​
  
eim/laboratoare/laborator10.1494272678.txt.gz · Last modified: 2017/05/08 22:44 by andrei.rosucojocaru
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