Differences
This shows you the differences between two versions of the page.
| Both sides previous revision Previous revision Next revision | Previous revision | ||
|
laboratoare:laborator10 [2015/05/12 01:16] Andrei Roșu-Cojocaru |
laboratoare:laborator10 [2017/02/20 20:55] (current) |
||
|---|---|---|---|
| Line 15: | Line 15: | ||
| ===== Configurare ===== | ===== Configurare ===== | ||
| - | **1.** În cadrul [[https://code.google.com/apis/console/|Consolei Google API]], se activează API-ul //Google Maps for Android//, generându-se totodată și o cheie Android prin care aplicația care rulează pe dispozitivul mobil va putea să acceseze o astfel de funcționalitate. | + | **1.** În cadrul [[https://console.developers.google.com|Consolei Google API]], se activează API-ul //Google Maps Android API//, generându-se totodată și o cheie Android prin care aplicația care rulează pe dispozitivul mobil va putea să acceseze o astfel de funcționalitate. |
| <note important>Trebuie să fiți autentificați folosind numele de utilizator și parola contului Google, altfel va trebui să vă creați un astfel de cont.</note> | <note important>Trebuie să fiți autentificați folosind numele de utilizator și parola contului Google, altfel va trebui să vă creați un astfel de cont.</note> | ||
| - | <note important>În situația în care nu a fost creat un proiect Google API în prealabil, trebuie realizat acest lucru, prin selectarea opțiunii //Create Project...//.</note> | + | <note important> |
| + | În situația în care nu a fost creat un proiect Google API în prealabil, trebuie realizat acest lucru, prin selectarea opțiunii //Create Project...// din meniul //Select a Project//. | ||
| - | * În secțiunea //APIs & auth// → //APIs//, în categoria //Google Maps APIs//, se accesează opțiunea //Google Maps Android APIs//, activându-se acest serviciu.\\ \\ {{ :laboratoare:laborator10:configurare01.png?nolink&600 }}\\ {{ :laboratoare:laborator10:configurare02.png?nolink }}\\ Ulterior, vor putea fi vizualizate statistici cu privire la gradul de utilizare al acestui serviciu (numărul de solicitări pe o perioadă de 28 de zile, defalcate pe țări / teritorii, metode, utilizatori, indicându-se și numărul de erori înregistrate precum și referințele prin intermediul altor legături Internet).\\ \\ {{ :laboratoare:laborator10:configurare03.png?nolink }}\\ {{ :laboratoare:laborator10:configurare04.png?nolink&600 }} | + | {{ :laboratoare:laborator10:createproject01.png?nolink }} |
| - | * Î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. | + | Pentru fiecare proiect trebuie să se precizeze următorii parametri: |
| - | * 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''. | + | * denumirea (se generează în mod automat un identificator pentru proiect); |
| - | * Linux <code> | + | * locația în care este găzduit motorul de aplicații; |
| - | student@pdsd2015:~$ export PATH=$PATH:/usr/local/java/jdk1.8.0_31/bin | + | * acordul pentru transmiterea de mesaje electronice cu privire la actualizări despre funcționalități, sugestii de performanță, sondaje în vederea precizării de opinii despre serviciile oferite, oferte speciale; |
| - | student@pdsd2015:~$ keytool -list -v -keystore ~/.android/debug.keystore -alias androiddebugkey -storepass android -keypass android | + | * acordul pentru folosirea serviciilor și a API-urilor asociate în acord cu termenii și condițiile specifice. |
| - | </code> | + | |
| - | * Windows <code> | + | {{ :laboratoare:laborator10:createproject02.png?nolink }} |
| - | C:\Users\Student> set PATH=%PATH%;C:\Program Files\Java\jdk_1.8.0_31\bin | + | |
| + | În cazul în care există un singur proiect, acesta este selectat în mod implicit. | ||
| + | |||
| + | {{ :laboratoare:laborator10:createproject03.png?nolink }} | ||
| + | </note> | ||
| + | |||
| + | * În secțiunea //API Manager// → //Overview//, în categoria //Google Maps APIs//, se accesează opțiunea //Google Maps Android API//, activându-se acest serviciu. | ||
| + | |||
| + | {{ :laboratoare:laborator10:configurare01.png?nolink&600 }} | ||
| + | |||
| + | {{ :laboratoare:laborator10:configurare02.png?nolink }} | ||
| + | |||
| + | Acest API nu va putea fi însă utilizat în situația în care nu sunt create credențialele (o cheie pentru API), necesare pentru a putea accesa orice serviciu Google. | ||
| + | |||
| + | {{ :laboratoare:laborator10:configurare09.png?nolink }} | ||
| + | |||
| + | * Credențialele pot fi obținute: | ||
| + | * prin accesarea butonului //Go to Credentials//, care implică următoarele etape:\\ **1.** indicarea tipului de API folosit (în cazul de față //Google Maps Android API//) și a locației din care va fi accesat API-ul (în cazul de față //Android//), pentru a se identifica tipul de cheie care va fi generată\\ {{ :laboratoare:laborator10:configurare04.png?nolink }}\\ **2.** specificarea unei denumiri asociate cheii pentru API;\\ {{ :laboratoare:laborator10:configurare05.png?nolink }}\\ se va indica și comanda care va trebui rulată pentru generarea cheii respective; 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@eim2016:~$ export PATH=$PATH:/usr/local/java/jdk1.8.0_92/bin | ||
| + | student@eim2016:~$ keytool -list -v -keystore ~/.android/debug.keystore -alias androiddebugkey -storepass android -keypass android | ||
| + | </code>\\ Windows <code> | ||
| + | C:\Users\Student> set PATH=%PATH%;C:\Program Files\Java\jdk_1.8.0_92\bin | ||
| C:\Users\Student> keytool -list -v -keystore "%USERPROFILE%\.android\debug.keystore" -alias androiddebugkey -storepass android -keypass android | C:\Users\Student> keytool -list -v -keystore "%USERPROFILE%\.android\debug.keystore" -alias androiddebugkey -storepass android -keypass android | ||
| - | </code> | + | </code>\\ Vor fi furnizate mai multe tipuri de amprente digitale, pentru cheia publică de tip Android fiind necesară cea de tip SHA-1 <code> |
| - | * Vor fi furnizate mai multe tipuri de amprente digitale, pentru cheia publică de tip Android fiind necesară cea de tip SHA-1 <code> | + | |
| Alias name: androiddebugkey | Alias name: androiddebugkey | ||
| - | Creation date: 25.02.2012 | + | Creation date: Mar 5, 2015 |
| Entry type: PrivateKeyEntry | Entry type: PrivateKeyEntry | ||
| Certificate chain length: 1 | Certificate chain length: 1 | ||
| Line 41: | Line 62: | ||
| Owner: CN=Android Debug, O=Android, C=US | Owner: CN=Android Debug, O=Android, C=US | ||
| Issuer: CN=Android Debug, O=Android, C=US | Issuer: CN=Android Debug, O=Android, C=US | ||
| - | Serial number: 3995d730 | + | Serial number: 4a38a96a |
| - | Valid from: Sat Feb 25 00:31:37 EET 2012 until: Mon Feb 17 00:31:37 EET 2042 | + | Valid from: Thu Mar 05 13:17:44 EET 2015 until: Sat Feb 25 13:17:44 EET 2045 |
| Certificate fingerprints: | Certificate fingerprints: | ||
| - | MD5: 88:5B:9A:C8:7A:1A:C9:BD:3D:90:2E:CF:93:CF:C3:51 | + | MD5: FC:1F:95:45:78:ED:50:C6:EE:8E:02:0A:3D:A5:80:D3 |
| - | SHA1: ED:A8:BA:A9:70:5E:0A:B2:8E:3C:73:AF:4C:69:35:E8:AA:C9:79:5E | + | SHA1: C7:02:98:BB:AD:1C:6E:D1:3A:35:50:8B:88:78:B6:D3:B7:9F:66:C0 |
| - | SHA256: 5E:CF:7A:86:FC:D9:39:93:EE:92:D6:06:EA:32:E7:06:7A:9C:48:38:D7: | + | SHA256: B3:D9:98:33:92:71:2D:CE:65:19:89:73:2A:64:3C:97:B9:37:A1:93:8C: |
| - | 85:D6:56:EF:C2:F6:9F:3A:84:CF:4D | + | 50:4F:E1:13:C4:21:C7:08:94:AC:A5 |
| Signature algorithm name: SHA256withRSA | Signature algorithm name: SHA256withRSA | ||
| Version: 3 | Version: 3 | ||
| Line 56: | Line 77: | ||
| SubjectKeyIdentifier [ | SubjectKeyIdentifier [ | ||
| KeyIdentifier [ | KeyIdentifier [ | ||
| - | 0000: 71 51 CC 58 87 D2 D3 91 D0 D2 89 67 F2 C7 E1 B7 qQ.X.......g.... | + | 0000: 99 78 63 24 A0 64 DF A8 67 45 8E 82 C6 8E 53 D1 .xc$.d..gE....S. |
| - | 0010: 2A AF DB DF *... | + | 0010: B8 C1 89 75 ...u |
| ] | ] | ||
| ] | ] | ||
| - | </code> | + | </code>\\ se accesează butonul //Add package name and fingerprint// pentru a se specifica denumirea pachetului corespunzător aplicației Android care va accesa API-ul respectiv și certificatul SHA-1\\ {{ :laboratoare:laborator10:configurare06.png?nolink }}\\ **3.** se vizualizează cheia pentru API generată care poate fi utilizată pentru accesarea serviciilor Google\\ {{ :laboratoare:laborator10:configurare07.png?nolink }}\\ În secțiunea //Credentials// pot fi vizualizate cheile pentru API generate anterior\\ {{ :laboratoare:laborator10:configurare08.png?nolink }} |
| - | * Se selectează butonul //Create New Key// din secțiunea //Public API access//.\\ \\ {{ :laboratoare:laborator10:configurare05.png?nolink }} | + | * în secțiunea //Credentials//, prin accesarea opțiunii //Create credentials// din care este selectat tipul de cheie necesar (în cazul de față //API key//); dacă nu se cunoaște tipul de cheie necesar, se poate selecta valoarea //Help me choose//\\ {{ :laboratoare:laborator10:configurare10.png?nolink }}\\ se indică tipul de cheie necesar, în funcție de locația pe care se găsește aplicația din care va fi accesat API-ul (în cazul de față //Android key//)\\ {{ :laboratoare:laborator10:configurare11.png?nolink }} |
| - | * Se specifică proprietățile cheii publice ce se dorește a fi generată: | + | |
| - | * tipul cheii publice - //Android Key//\\ \\ {{ :laboratoare:laborator10:configurare06.png?nolink }} | + | |
| - | * 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 }} | + | |
| **2.** Pe dispozitivul mobil (fizic sau virtual) pe care se va rula aplicația care accesează serviciul de localizare, trebuie să se găsească cea mai recentă versiune de //Google Play Services//, asociindu-se totodată contul de utilizator Google pentru care s-a generat cheia publică. | **2.** Pe dispozitivul mobil (fizic sau virtual) pe care se va rula aplicația care accesează serviciul de localizare, trebuie să se găsească cea mai recentă versiune de //Google Play Services//, asociindu-se totodată contul de utilizator Google pentru care s-a generat cheia publică. | ||
| Line 72: | Line 89: | ||
| * Linux <code> | * Linux <code> | ||
| - | student@pdsd2015:~$ cd /opt/android-sdk-linux/tools | + | student@eim2016:~$ cd /opt/android-sdk-linux/tools |
| - | student@pdsd2015:/opt/android-sdk-linux/tools$ sudo ./android | + | student@eim2016:/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 80: | Line 97: | ||
| </code> | </code> | ||
| - | {{ :laboratoare:laborator10:configurare09.png?nolink&600 }} | + | {{ :laboratoare:laborator10:configurare12.png?nolink&600 }} |
| Astfel, se instalează următoarele pachete: | Astfel, se instalează următoarele pachete: | ||
| Line 88: | Line 105: | ||
| Biblioteca pentru accesarea funcționalității oferite de serviciul de localizare se găsește la ''<android-sdk>/extras/google/google_play_services/libproject/google-play-services_lib''. | Biblioteca pentru accesarea funcționalității oferite de serviciul de localizare se găsește la ''<android-sdk>/extras/google/google_play_services/libproject/google-play-services_lib''. | ||
| - | În mediul integrat de dezvoltare Eclipse Luna SR1a (4.4.1), se realizează o referință către biblioteca //Google Play Services//, astfel descărcată. | + | În mediul integrat de dezvoltare Eclipse, se realizează o referință către biblioteca //Google Play Services//, astfel descărcată. |
| - | * se accesează //File// → //Import// → //Android// → //Existing Android Code Into Workspace//\\ \\ {{ :laboratoare:laborator10:configurare10.png?nolink&500 }} | + | * se accesează //File// → //Import// → //Android// → //Existing Android Code Into Workspace//\\ \\ {{ :laboratoare:laborator13:configurare10.png?nolink&500 }} |
| - | * se indică locația unde se găsește instalată biblioteca //Google Play Services//, creându-se o copie a acestuia în spațiul de lucru (se bifează opțiunea //Copy projects into workspace//)\\ \\ {{ :laboratoare:laborator10:configurare11.png?nolink&800 }} | + | * se indică locația unde se găsește instalată biblioteca //Google Play Services//, creându-se o copie a acestuia în spațiul de lucru (se bifează opțiunea //Copy projects into workspace//)\\ \\ {{ :laboratoare:laborator10:configurare14.png?nolink&800 }} |
| - | **4.** În mediul integrat de dezvoltare Eclipse Luna SR1a (4.4.1), se creează un proiect corespunzător unei aplicații Android, având următoarele proprietăți: | + | **4.** În mediul integrat de dezvoltare preferat (Android Studio sau Eclipse), se creează un proiect corespunzător unei aplicații Android, având următoarele proprietăți: |
| * denumirea pachetului care identifică aplicația Android în mod unic trebuie să fie aceeași cu cea precizată în momentul în care a fost generată cheia publică; | * denumirea pachetului care identifică aplicația Android în mod unic trebuie să fie aceeași cu cea precizată în momentul în care a fost generată cheia publică; | ||
| - | * trebuie să existe o referință către biblioteca //Google Play Services// (click dreapta pe denumirea proiectului în //Package Explorer// → //Properties//), se accesează opțiunea //Android// și se specifică referința către aceasta respectivă în secțiunea //Library// (accesând butonul //Add//)\\ \\ {{ :laboratoare:laborator10:configurare12.png?nolink&800 }} | + | * pentru **Android Studio**, trebuie ca în fișierul ''build.gradle'' să se specifice dependința către biblioteca Google Play Services (''com.google.android.gms:play-services''), în secțiunea ''dependencies'': <file build.gradle> |
| + | ... | ||
| + | dependencies { | ||
| + | ... | ||
| + | compile 'com.google.android.gms:play-services:8.4.0' | ||
| + | } | ||
| + | </file> | ||
| + | |||
| + | * pentru **Eclipse**, trebuie să existe o referință către biblioteca //Google Play Services// (click dreapta pe denumirea proiectului în //Package Explorer// → //Properties//), se accesează opțiunea //Android// și se specifică referința către aceasta respectivă în secțiunea //Library// (accesând butonul //Add//)\\ \\ {{ :laboratoare:laborator15:configurare12.png?nolink&800 }} | ||
| * în fișierul ''AndroidManifest.xml'' | * în fișierul ''AndroidManifest.xml'' | ||
| Line 128: | Line 153: | ||
| <metadata | <metadata | ||
| android:name="com.google.android.maps.v2.API_KEY" | android:name="com.google.android.maps.v2.API_KEY" | ||
| - | android:value="AIzaSyA650lJNGrJFLQ1Ns5L0FHY90XnHhO-P5s" /> | + | android:value="AIzaSyACwBefUuAjtvG3Xi8kOD97Nrrzb2b1FrM" /> |
| </code> | </code> | ||
| * versiunea folosită pentru biblioteca Google Play Services (preluată din cadrul proiectului referit) <code xml> | * versiunea folosită pentru biblioteca Google Play Services (preluată din cadrul proiectului referit) <code xml> | ||
| Line 137: | Line 162: | ||
| * pentru a se asigura faptul că funcționalitatea nu va putea fi accesată decât prin intermediul aplicației Android, se va defini o permisiune, definindu-se o protecție la nivel de semnătură:<code xml> | * pentru a se asigura faptul că funcționalitatea nu va putea fi accesată decât prin intermediul aplicației Android, se va defini o permisiune, definindu-se o protecție la nivel de semnătură:<code xml> | ||
| <permission | <permission | ||
| - | android:name="ro.pub.cs.systems.pdsd.lab10.googlemaps.permission.MAPS_RECEIVE" | + | android:name="ro.pub.cs.systems.eim.lab10.googlemaps.permission.MAPS_RECEIVE" |
| android:protectionLevel="signature" /> | android:protectionLevel="signature" /> | ||
| <uses-permission | <uses-permission | ||
| - | android:name="ro.pub.cs.systems.pdsd.lab10.googlemaps.permission.MAPS_RECEIVE" /> | + | android:name="ro.pub.cs.systems.eim.lab10.googlemaps.permission.MAPS_RECEIVE" /> |
| </code> | </code> | ||
| Line 174: | Line 199: | ||
| ==== Dispozitiv Fizic ==== | ==== Dispozitiv Fizic ==== | ||
| - | 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//). | + | Pentru accesarea funcționalităților legate de locație pe dispozitivul fizic este necesar să se activeze opțiunea //Location// din secțiunea de configurări (//Settings// → //Personal//). |
| {{ :laboratoare:laborator10:physical_device_01.png?nolink&400 }} | {{ :laboratoare:laborator10:physical_device_01.png?nolink&400 }} | ||
| + | |||
| + | Valoarea configurației //Location// trebuie să aibă valoarea //On//, pentru ca serviciile de localizare să poată fi utilizate. De asemenea, sunt indicate aplicațiile Android care au folosit serviciile de localizare. | ||
| + | |||
| + | {{ :laboratoare:laborator10:physical_device_02.png?nolink&400 }} | ||
| 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//). | 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//). | ||
| Line 183: | Line 212: | ||
| * //Device only// - locația este determinată folosind doar informațiile furnizate de sistemul global de poziționare GPS. | * //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_03.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> | <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> | ||
| Line 205: | Line 234: | ||
| De asemenea, este implementată și funcționalitatea prin intermediul căreia poate fi vizualizată poziția precizată în cadrul unei hărți Google. | De asemenea, este implementată și funcționalitatea prin intermediul căreia poate fi vizualizată poziția precizată în cadrul unei hărți Google. | ||
| - | {{ :laboratoare:laborator10:genymotion_mapping_service.png?nolink&600 }} | + | {{ :laboratoare:laborator10:genymotion_gps_03.png?nolink&800 }} |
| - | + | ||
| - | 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 }} | + | |
| - | + | ||
| - | <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> | + | |
| - | + | ||
| === AVD === | === AVD === | ||
| Line 226: | Line 244: | ||
| {{ :laboratoare:laborator10:avd_configuration.png?nolink&600 }} | {{ :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. | + | 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. |
| {{ :laboratoare:laborator10:avd_emulator_control.png?nolink&600 }} | {{ :laboratoare:laborator10:avd_emulator_control.png?nolink&600 }} | ||
| + | |||
| ===== Gestiunea unei Hărți Google ===== | ===== Gestiunea unei Hărți Google ===== | ||
| Line 373: | Line 392: | ||
| 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 1008: | Line 1029: | ||
| ===== Activitate de Laborator ===== | ===== Activitate de Laborator ===== | ||
| - | **1.** Să se acceseze [[https://code.google.com/apis/console/|Google Developer's Console]], după ce a fost realizată autentificarea cu datele contului Google (nume de utilizator, parolă): | + | **1.** Să se acceseze [[https://console.developers.google.com|Google Developer's Console]], după ce a fost realizată autentificarea cu datele contului Google (nume de utilizator, parolă): |
| * se obține un număr de proiect (dacă această operație nu a fost realizată anterior); | * se obține un număr de proiect (dacă această operație nu a fost realizată anterior); | ||
| * se activează serviciul //Google Maps Android API//; | * se activează serviciul //Google Maps Android API//; | ||
| Line 1020: | Line 1041: | ||
| **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/pdsd2015/Laborator10|]]. | + | **3.** Să se cloneze în directorul de pe discul local conținutul depozitului la distanță de la [[https://www.github.com/eim2016/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@pdsd2015:~$ git clone https://www.github.com/pdsd2015/Laborator10 | + | student@eim2016:~$ git clone https://www.github.com/eim2016/Laborator10 |
| </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@pdsd2015:~$ cd Laborator10 | + | student@eim2016:~$ cd Laborator10 |
| - | student@pdsd2015:~/Laborator10$ git remote add Laborator10_perfectstudent https://github.com/perfectstudent/Laborator10 | + | student@eim2016:~/Laborator10$ git remote add Laborator10_perfectstudent https://github.com/perfectstudent/Laborator10 |
| - | student@pdsd2015:~/Laborator10$ git push Laborator10_perfectstudent master | + | student@eim2016:~/Laborator10$ git push Laborator10_perfectstudent master |
| </code> | </code> | ||
| Line 1038: | Line 1059: | ||
| * î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. | ||
| - | <note>În situația în care nu se reușește configurarea unui dispozitiv virtual, se poate folosi [[http://pdsd2015.andreirosucojocaru.ro/resources/Genymobile.tar.gz|o imagine Nexus S (API 16)]] care trebuie plasată în directorul ''$HOME''.</note> | + | <note>În situația în care nu se reușește configurarea unui dispozitiv virtual, se poate folosi [[http://eim2016.andreirosucojocaru.ro/resources/Genymobile.tar.gz|o imagine Nexus S (API 16)]] care trebuie plasată în directorul ''$HOME''.</note> |
| - | **6.** Să se importe în mediul integrat de dezvoltare Eclipse Luna SR1a (4.4.1) proiectele ''google-play-service_lib'' și ''01-GoogleMapsPlaces'' din directorul ''labtasks'' (în această ordine). | + | **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''. |
| 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 1070: | Line 1091: | ||
| - 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 Eclipse Luna SR1a (4.4.1) proiectele ''google-play-service_lib'' și ''02-GoogleMapsLocationUpdate'' din directorul ''labtasks'' (în această ordine). | + | **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''. |
| 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 1110: | Line 1131: | ||
| - 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 Eclipse Luna SR1a (4.4.1) proiectele ''google-play-service_lib'' și ''03-GoogleMapsGeocoding'' din directorul ''labtasks'' (în această ordine). | + | **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''. |
| 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 1130: | Line 1151: | ||
| - 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. | ||
| - | **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 preferat (Android Studio sau Eclipse) proiectele ''GoogleMapsGeofencing'' și ''google-play-service_lib'' (doar pentru Eclipse) 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ă, 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 comparațiile. | 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 }} | ||
| + | |||
| + | Notificările vor fi generate: | ||
| + | |||
| + | - când utilizatorul intră în zona de restricție geografică\\ \\ {{:laboratoare:laborator10:google_maps_geofencing_02.png?nolink&300}} {{:laboratoare:laborator10:google_maps_geofencing_03.png?nolink&300}} | ||
| + | - când utilizatorul iese din zona de restricție geografică\\ \\ {{:laboratoare:laborator10:google_maps_geofencing_04.png?nolink&300}} {{:laboratoare:laborator10:google_maps_geofencing_05.png?nolink&300}} | ||
| + | |||
| + | 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 1155: | Line 1185: | ||
| 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()''). | ||
| **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@pdsd2015:~/Laborator10$ git add * | + | student@eim2016:~/Laborator10$ git add * |
| - | student@pdsd2015:~/Laborator10$ git commit -m "implemented taks for laboratory 10" | + | student@eim2016:~/Laborator10$ git commit -m "implemented taks for laboratory 10" |
| - | student@pdsd2015:~/Laborator10$ git push Laborator10_perfectstudent master | + | student@eim2016:~/Laborator10$ git push Laborator10_perfectstudent master |
| </code> | </code> | ||
| Line 1176: | Line 1206: | ||
| [[http://developer.android.com/reference/com/google/android/gms/location/package-summary.html|Package com.google.android.gms.location]]\\ | [[http://developer.android.com/reference/com/google/android/gms/location/package-summary.html|Package com.google.android.gms.location]]\\ | ||
| [[http://www.androidhive.info/2013/08/android-working-with-google-maps-v2/|Android Working with Google Maps v2]]\\ | [[http://www.androidhive.info/2013/08/android-working-with-google-maps-v2/|Android Working with Google Maps v2]]\\ | ||
| - | [[http://javapapers.com/android/android-get-address-with-street-name-city-for-location-with-geocoding/|Android Get Address with Street Name, City for Location with Geocoding]] | + | [[http://javapapers.com/android/android-get-address-with-street-name-city-for-location-with-geocoding/|Android Get Address with Street Name, City for Location with Geocoding]]\\ |
| + | [[https://developers.google.com/android/guides/setup#add_google_play_services_to_your_project|Setting up Google Play Services in Android Studio]] | ||
