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:laborator10 [2015/05/11 22:07]
Andrei Roșu-Cojocaru [Activitate de Laborator]
laboratoare:laborator10 [2015/05/12 01:44] (current)
Andrei Roșu-Cojocaru
Line 24: Line 24:
  
   * În secțiunea //APIs & auth// → //​Credentials//,​ se generează o cheie publică care va fi utilizată la procesul de autentificare,​ în vederea accesării funcționalității puse la dispoziție de serviciul de localizare.   * În secțiunea //APIs & auth// → //​Credentials//,​ se generează o cheie publică care va fi utilizată la procesul de autentificare,​ în vederea accesării funcționalității puse la dispoziție de serviciul de localizare.
-    * Folosind utilitarul Java ''​keytool'',​ se generează ​amprenta ​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''​.+    * 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>​       * Linux <​code>​
 student@pdsd2015:​~$ export PATH=$PATH:/​usr/​local/​java/​jdk1.8.0_31/​bin student@pdsd2015:​~$ export PATH=$PATH:/​usr/​local/​java/​jdk1.8.0_31/​bin
Line 64: Line 64:
     * Se specifică proprietățile cheii publice ce se dorește a fi generată:     * Se specifică proprietățile cheii publice ce se dorește a fi generată:
       * tipul cheii publice - //Android Key//\\ \\ {{ :​laboratoare:​laborator10:​configurare06.png?​nolink }}       * tipul cheii publice - //Android Key//\\ \\ {{ :​laboratoare:​laborator10:​configurare06.png?​nolink }}
-      * parametrii de conectare - amprenta ​digitală și pachetul corespunzător aplicației Android (separate prin caracterul '';''​),​ astfel încât să fie acceptate solicitări numai pe baza acestor valori, în caz contrar permițându-se accesul indiferent de certificatul deținut sau de aplicația Android de pe care provine\\ \\ {{ :​laboratoare:​laborator10:​configurare07.png?​nolink&​600 }}+      * parametrii de conectare - semnătura ​digitală și pachetul corespunzător aplicației Android (separate prin caracterul '';''​),​ astfel încât să fie acceptate solicitări numai pe baza acestor valori, în caz contrar permițându-se accesul indiferent de certificatul deținut sau de aplicația Android de pe care provine\\ \\ {{ :​laboratoare:​laborator10:​configurare07.png?​nolink&​600 }}
     * Se identifică valoarea cheii publice care va putea fi utilizată.\\ \\ {{ :​laboratoare:​laborator10:​configurare08.png?​nolink&​800 }}     * Se identifică valoarea cheii publice care va putea fi utilizată.\\ \\ {{ :​laboratoare:​laborator10:​configurare08.png?​nolink&​800 }}
  
Line 174: Line 174:
 ==== Dispozitiv Fizic ==== ==== Dispozitiv Fizic ====
  
-Pentru accesarea funcționalităților legate de locație pe dispozitivul fizic este necesar să se realizeze următoarele configurări:​ +Pentru accesarea funcționalităților legate de locație pe dispozitivul fizic este necesar să se activeze opțiunea ​//Location// (care trebuie să aibă valoarea ​//On//) din secțiunea de configurări (//Settings// → //Personal//).
- +
-  * //Settings// → //Personal// → //Location// (valoarea ​//On//)+
  
 {{ :​laboratoare:​laborator10:​physical_device_01.png?​nolink&​400 }} {{ :​laboratoare:​laborator10:​physical_device_01.png?​nolink&​400 }}
  
-  * //​Settings//​ → //​Personal//​ → //​Location//​ → //​Mode// ​→ //Location Mode// (valoarea ​//High Accuracy//)+Se poate controla acuratețea informațiilor furnizate, raportat la consumul de energie, prin intermediul opțiunilor disponibile în secțiunea //Location Mode// din secțiunea de configurări (//​Settings//​ → //​Personal//​ → //​Location//​ → //Mode//). 
 +  * //High accuracy// - locația este determinată folosind toate resursele disponibile ​(sistemul global de poziționare GPS, rețelele mobile și fără fir); 
 +  * //Battery saving// - locația este determinată folosind doar informațiile furnizate de rețelele mobile și fără fir; 
 +  * //Device only// - locația este determinată folosind doar informațiile furnizate de sistemul global de poziționare GPS.
    
 {{ :​laboratoare:​laborator10:​physical_device_02.png?​nolink&​400 }} {{ :​laboratoare:​laborator10:​physical_device_02.png?​nolink&​400 }}
 +
 +<note tip>Se recomandă ca determinarea locației să se realizeze folosind toate resursele disponibile la un moment dat de timp pentru o precizie cât mai mare (cu un consum de energie corespunzător).</​note>​
 ==== Dispozitiv Virtual ==== ==== Dispozitiv Virtual ====
  
 === Genymotion === === Genymotion ===
  
-Pentru accesarea funcționalităților legate de locație pe dispozitivul virtual Genymotion este necesar să se realizeze următoarele configurări:​+Pentru accesarea funcționalităților legate de locație pe dispozitivul virtual Genymotion este necesar să se activeze serviciul GPS, accesibil din meniul lateral sau folosind combinația de taste Ctrl + 2 (se selectează valoarea //On//).
  
-  * Ctrl + 2 sau se apasă butonul //GPS// din meniul vertical +{{ :​laboratoare:​laborator10:​genymotion_gps_01.png?​nolink&​400 }}
-    * activat (valoarea //On//) +
-    * se completează parametrii +
-      * latitudine +
-      * longitudine +
-      * altitudine +
-    * se indică acuratețea (nivelul de precizie) +
-    * se specifică direcția+
  
-{{ :laboratoare:​laborator10:​genymotion_gps.png?​nolink&​400 }}+Alte informații care pot fi configurate sunt: 
 +  * latitudinea - exprimată în grade; 
 +  * longitudinea - exprimată în grade; 
 +  * altitudinea - exprimată în metri; 
 +  * acuratețea (nivelul de precizie) - exprimat în număr de metri cu care să se aproximeze locația exactă; 
 +  * direcția - exprimată în grade.
  
-  * //​Settings//​ → //Location Services//, ​se bifează opțiunile +{{ :​laboratoare:​laborator10:​genymotion_gps_02.png?​nolink&​400 }} 
-    * Google'​s location service + 
-    * GPS satellites +De asemenea, este implementată și funcționalitatea prin intermediul căreia poate fi vizualizată poziția precizată în cadrul unei hărți Google. 
-    * Location & Google Search+ 
 +{{ :​laboratoare:​laborator10:​genymotion_mapping_service.png?​nolink&​600 }} 
 + 
 +Alte configurații legate de serviciul de localizate sunt disponibile în secțiunea ​//​Settings//​ → //Location Services//, ​unde este recomandat să se selecteze toate opțiunile ​existente: 
 +  * //Google'​s location service// - permite transmisia de informații anonime către Google și utilizarea rețelelor mobile și fără fir pentru determinarea locației aproximative,​ atunci când nu sunt disponibile alte resurse; 
 +  * //GPS satellites// - oferă accesul la sistemul de poziționare globală GPS pentru determinarea locației; 
 +  * //Location & Google Search// - determină utilizarea de către Google a locației curente pe baza căreia să își contextualizeze serviciile.
    
 {{ :​laboratoare:​laborator10:​genymotion_location_services.png?​nolink&​400 }} {{ :​laboratoare:​laborator10:​genymotion_location_services.png?​nolink&​400 }}
  
-Se poate vizualiza pe hartă locația curentă:+<​note>​În cazul în care nu sunt selectate toate aceste opțiuni, este posibil ca serviciul Geocoder să nu fie disponibil. Dacă o astfel de situație persistă chiar și în condițiile în care configurațiile sunt corespunzătoare,​ dispozitivul virtual trebuie repornit, întrucât eroarea este determinată de o problemă cu serviciul Google Play Services, a cărui stare nu a fost actualizată.</​note>​ 
  
-{{ :​laboratoare:​laborator10:​genymotion_mapping_service.png?​nolink&​600 }} 
 === AVD === === AVD ===
  
-Pentru accesarea funcționalităților legate de locație pe dispozitivul virtual AVD este necesar să se acceseze ​perspectiva ​//DDMS// din Eclipse Luna SR1a (4.4.1) ​- //Window// → //Open Perspective//​ → //​DDMS// ​- și în secțiunea //Emulator Control// → //Location Control//, se stabilesc valorile pentru latitudine și longitudine,​ după care se apasă butonul //Send//.+Pentru accesarea funcționalităților legate de locație pe dispozitivul virtual AVD este necesar ​ca în secțiunea de configurări corespunzătoare (//​Settings//​ → //Location access//​) ​să se specifice următorii parametri:​ 
 +  * //Access to my location//: //On// - permite aplicațiilor Android să acceseze ​locația curentă, pe baza informațiilor furnizate din sursele disponibile;​ 
 +  * //GPS Sattelites//:​ activat - se utilizează sistemul de poziționare globală GPS pentru determinarea locației curente; 
 +  * //Wi-Fi & mobile network location//: activat - se utilizează o estimare pentru locația curentă pe baza serviciilor oferite de Google; totodată, vor fi transmise informații anonime în acest sens. 
 + 
 +{{ :​laboratoare:​laborator10:​avd_configuration.png?​nolink&​600 }} 
 + 
 +Controlul poziției curente poate fi realizat prin intermediul perspectivei ​//DDMS// din Eclipse Luna SR1a (4.4.1) ​(//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.
  
 {{ :​laboratoare:​laborator10:​avd_emulator_control.png?​nolink&​600 }} {{ :​laboratoare:​laborator10:​avd_emulator_control.png?​nolink&​600 }}
Line 359: Line 373:
 API-ul Android pune la dispoziția utilizatorilor un [[http://​developer.android.com/​reference/​com/​google/​android/​gms/​location/​FusedLocationProviderApi.html|furnizor integrat de servicii de localizare]],​ prin care aceștia pot specifica anumiți parametrii de configurare,​ cum ar fi nivelul de precizie și gradul de utilizare al bateriei. API-ul Android pune la dispoziția utilizatorilor un [[http://​developer.android.com/​reference/​com/​google/​android/​gms/​location/​FusedLocationProviderApi.html|furnizor integrat de servicii de localizare]],​ prin care aceștia pot specifica anumiți parametrii de configurare,​ cum ar fi nivelul de precizie și gradul de utilizare al bateriei.
  
-Funcționalitatea legată de gestiunea locației curente (ca de altfel toate funcționalitățile legate de biblioteca Google Play Services) este disponibilă prin intermediul unui obiect de tip [[http://​developer.android.com/​reference/​com/​google/​android/​gms/​common/​api/​GoogleApiClient.html|GoogleApiClient]],​ a cărui instanță este obținută de regulă pe metoda ''​onCreate()''​ a aplicației Android, eliberarea resurselor corespunzătoare acesteia fiind făcută pe metoda ''​onDestroy()'' ​+Funcționalitatea legată de gestiunea locației curente (ca de altfel toate funcționalitățile legate de biblioteca Google Play Services) este disponibilă prin intermediul unui obiect de tip [[http://​developer.android.com/​reference/​com/​google/​android/​gms/​common/​api/​GoogleApiClient.html|GoogleApiClient]],​ a cărui instanță este obținută de regulă pe metoda ''​onCreate()''​ a aplicației Android, eliberarea resurselor corespunzătoare acesteia fiind făcută pe metoda ''​onDestroy()''​. 
 + 
 +{{ :​laboratoare:​laborator10:​clientul_google_api.png?​nolink&​600 }}
  
 <code java> <code java>
Line 1031: Line 1047:
  
 {{ :​laboratoare:​laborator10:​google_maps_places.png?​nolink&​400 }} {{ :​laboratoare:​laborator10:​google_maps_places.png?​nolink&​400 }}
 +
 +Reperele vor fi stocate în cadrul unei liste (obiect de tip ''​Spinner''​),​ astfel încât la selecția unui element din cadrul acesteia, se va vizualiza obiectivul geografic marcat anterior.
  
 Se cere să se implementeze funcționalitățile pentru adăugarea unui reper și ștergerea tuturor reperelor de pe hartă: Se cere să se implementeze funcționalitățile pentru adăugarea unui reper și ștergerea tuturor reperelor de pe hartă:
Line 1057: Line 1075:
  
 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.
-  - când serviciul este activat, se vizualizează pe hartă doar locația curentă;+  - când serviciul este activat, se vizualizează pe hartă doar locația curentă, completându-se în mod automat informații precum latitudinea și longitudinea,​ actualizându-se corespunzător poziția;
   - când serviciul este dezactivat, utilizatorul are posibilitatea de a controla poziția care se vizualizează pe hartă.   - când serviciul este dezactivat, utilizatorul are posibilitatea de a controla poziția care se vizualizează pe hartă.
  
Line 1068: Line 1086:
 Se cere să se implementeze metodele pentru pornirea și oprirea serviciului de actualizare periodică a locației de pe hartă: Se cere să se implementeze metodele pentru pornirea și oprirea serviciului de actualizare periodică a locației de pe hartă:
  
-**a)** metoda ''​startLocationUpdates()''​ din clasa ''​GoogleMapsActivity''​+**a)** metoda ''​startLocationUpdates()''​ din clasa ''​GoogleMapsActivity''​:
   - se apelează metoda ''​requestLocationUpdates()''​ din clasa ''​FusedLocationProviderApi''​ <code java>   - se apelează metoda ''​requestLocationUpdates()''​ din clasa ''​FusedLocationProviderApi''​ <code java>
 LocationServices.FusedLocationApi.requestLocationUpdates( LocationServices.FusedLocationApi.requestLocationUpdates(
Line 1116: Line 1134:
 **9.** Să se importe în mediul integrat de dezvoltare Eclipse Luna SR1a (4.4.1) proiectele ''​google-play-service_lib''​ și ''​04-GoogleMapsGeofencing''​ din directorul ''​labtasks''​ (în această ordine). **9.** Să se importe în mediul integrat de dezvoltare Eclipse Luna SR1a (4.4.1) proiectele ''​google-play-service_lib''​ și ''​04-GoogleMapsGeofencing''​ din directorul ''​labtasks''​ (în această ordine).
  
-Se dorește să se implementeze o aplicație care să monitorizeze activitatea unui dispozitiv mobil raportat la o zonă de restricție geografică, raportând evenimentele de tip intrare, respectiv ieșire prin intermediul unor notificări. +Se dorește să se implementeze o aplicație care să monitorizeze activitatea unui dispozitiv mobil raportat la o zonă de restricție geografică. ​
  
-Serviciul referitor la monitorizarea unei anumite locații poate fi activat sau dezactivat, specificându-se de fiecare dată coordonatele zonei față de care sunt realizate ​modificările.+Serviciul referitor la monitorizarea unei anumite locații poate fi activat sau dezactivat, specificându-se de fiecare dată coordonatele zonei față de care sunt realizate ​comparațiile.
  
 Aplicația va afișa pe hartă în permanență locația curentă prin actualizările periodice care sunt transmise. Aplicația va afișa pe hartă în permanență locația curentă prin actualizările periodice care sunt transmise.
  
-{{:​laboratoare:​laborator10:​google_maps_geofencing_01.png?​nolink&​400}}  +{{ :​laboratoare:​laborator10:​google_maps_geofencing_01.png?​nolink&​400 }}  
-{{:laboratoare:​laborator10:​google_maps_geofencing_02.png?​nolink&​400}} ​ + 
-{{:​laboratoare:​laborator10:​google_maps_geofencing_03.png?​nolink&​400}} ​ +Notificările vor fi generate: 
-{{:​laboratoare:​laborator10:​google_maps_geofencing_04.png?​nolink&​400}}  + 
-{{:​laboratoare:​laborator10:​google_maps_geofencing_05.png?​nolink&​400}}  +  - când utilizatorul intră în zona de restricție geografică\\ \\ {{ :​laboratoare:​laborator10:​google_maps_geofencing_02_03.png?​nolink&​600 }} 
-{{:​laboratoare:​laborator10:​google_maps_geofencing_06.png?​nolink&​400}} ​+  - când utilizatorul iese din zona de restricție geografică\\ \\ {{ :​laboratoare:​laborator10:​google_maps_geofencing_04_05.png?​nolink&​600 }} 
 + 
 +Detaliile cu privire la evenimentul produs vor putea fi vizualizate în cadrul unei activități dedicate.
  
 Se cere să se analizeze evenimentul legat de zona de restricție geografică în cadrul serviciului ''​GeofenceTrackerIntentService'',​ pe metoda ''​onHandleIntent()''​. Se cere să se analizeze evenimentul legat de zona de restricție geografică în cadrul serviciului ''​GeofenceTrackerIntentService'',​ pe metoda ''​onHandleIntent()''​.
Line 1146: Line 1166:
 List<​Geofence>​ triggeringGeofences = geofencingEvent.getTriggeringGeofences();​ List<​Geofence>​ triggeringGeofences = geofencingEvent.getTriggeringGeofences();​
 </​code>​ </​code>​
-      - se parcurge lista și pentru fiecare obiect se obține identificatorul unic (''​gerRequestId()''​);​+      - se parcurge lista și pentru fiecare obiect se obține identificatorul unic (''​getRequestId()''​);​
   - se transmite mesajul explicativ prin intermediul unei notificări (ca parametru al metodei ''​sendNotification()''​).   - se transmite mesajul explicativ prin intermediul unei notificări (ca parametru al metodei ''​sendNotification()''​).
  
laboratoare/laborator10.1431371253.txt.gz · Last modified: 2015/05/11 22:07 by Andrei Roșu-Cojocaru
CC Attribution-Share Alike 4.0 International
Driven by DokuWiki Recent changes RSS feed Valid CSS Valid XHTML 1.0