Activitate de Laborator
1. Să se acceseze 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 activează serviciul Google Maps Android API;
- se generează o semnătură digitală de tip SHA-1 folosind utilitarul
Java
keytool
; - se creează o cheie publică pentru transmiterea de mesaje provenind de la un dispozitiv mobil, pe baza semnăturii digitale și a pachetului care identifică în mod unic aplicația respectivă.
Note
Pentru toate aplicațiile Android va trebui completată
cheia publică în fișierul AndroidManifest.xml
.
Mai multe detalii pot fi obținute în secțiunea Configurare.
2. În contul Github personal, să se creeze un depozit denumit
'Laborator11'. 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 .
În urma acestei operații, directorul Laborator11 va trebui să se conțină
directoarele labtasks
și solutions
.
student@eg-106:~$ git clone https:*github.com/eim-lab/Laborator11.git
4. Să se încarce conținutul descărcat în cadrul depozitului
Laborator11
de pe contul Github personal.
student@eg-106:~$ cd Laborator11
student@eg-106:~/Laborator11$ git remote add Laborator11_perfectstudent https://github.com/perfectstudent/Laborator11
student@eg-106:~/Laborator11$ git push Laborator11_perfectstudent master
5. Să se configureaze mașina pe care va rula aplicația:
- în cazul în care se utilizează un emulator, se configurează astfel încât acesta să aibă instalat Google Play Services;
- î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 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.
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ă:
a) pentru adăugarea unui reper:
- se obțin informațiile legate de latitudine, longitudine și denumire, din câmpurile text corespunzătoare și se verifică să fie completate (în caz contrar generându-se un mesaj de eroare);
- se realizează navigarea către locația respectivă;
- se instanțiază un obiect de tip
MarkerOptions
, desemnând reperul care va fi plasat pe harta Google;`MarkerOptions marker = new MarkerOptions() .position(new LatLng( Double.parseDouble(latitudeContent), Double.parseDouble(longitudeContent) )) .title(nameContent); marker.icon(BitmapDescriptorFactory.defaultMarker(Utilities.getDefaultMarker(markerTypeSpinner.getSelectedItemPosition())));
- se adaugă reperul pe harta Google;
- se adaugă reperul în lista de locații (
places
), notificându-se și adaptorul corespunzător obiectului de tipSpinner
(placesAdapter
) de această modificare, astfel încât acesta să fie actualizat corespunzător.
b) pentru ștergerea tuturor reperelor de pe hartă:
- se verifică să fie completate repere pe harta Google (în caz contrar generându-se un mesaj de eroare);
- se șterg toate reperele pe harta Google;
- se șterg toate reperele din lista de locații (
places
), notificându-se și adaptorul corespunzător obiectului de tipSpinner
(placesAdapter
) de această modificare, astfel încât acesta să fie actualizat corespunzător.
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.
- 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ă.
De asemenea, se dorește să se poată selecta tipul de hartă care să fie afișat.
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
:
-
se apelează metoda
requestLocationUpdates()
din clasaFusedLocationProviderApi` LocationServices.FusedLocationApi.requestLocationUpdates( googleApiClient, locationRequest, this );
-
se actualizează starea serviciului de transmitere periodice a locației curente (
locationUpdatesStatus
); -
se vizualizează poziția curentă pe harta Google (se apelează metoda
setMyLocationEnabled(true)
); -
se modifică textul și culoarea butonului
locationUpdateStatusButton
; -
se navighează la locația curentă;
-
se dezactivează controalele grafice
latitudeEditText
,longitudeEditText
,navigateToLocationButton
.
b) metoda stopLocationUpdates()
din clasa GoogleMapsActivity
- se apelează metoda
removeLocationUpdates()
din clasaFusedLocationProviderApi
LocationServices.FusedLocationApi.removeLocationUpdates( googleApiClient, this );
- se actualizează starea serviciului de transmitere periodice a
locației curente (
locationUpdatesStatus
); - nu se vizualizează poziția curentă pe harta Google (se apelează
metoda
setMyLocationEnabled(false)
); - se modifică textul și culoarea butonului
locationUpdateStatusButton
; - se activează controalele grafice
latitudeEditText
,longitudeEditText
,navigateToLocationButton
, acestea având un conținut vid.
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 cere să se implementeze procesul de conversie propriu-zis, în cadrul
serviciului GetLocationAddressIntentService
, pe metoda
onHandleIntent()
.
- se instanțiază un obiect de tip
Geocoder
Geocoder geocoder = new Geocoder(this, Locale.getDefault());
- se obține lista de adrese prin invocarea metodei
getFromLocation()
care primește ca parametri:- latitudinea;
- longitudinea;
- numărul de adrese întoarse (
Constants.NUMBER_OF_ADDRESSES
);
- se tratează corespunzător tipurile de execepții ce pot fi generate
(
IOException
,IllegalArgumentException
) precum și situația în care nu este furnizat nici un rezultat; - se parcurge lista de adrese: pentru fiecare adresă în parte se
concatenează rândurile distincte, concatenându-se toate rezultatele
obținute;
- numărul de linii dintr-o adresă este furnizat de metoda
getMaxAddressLineIndex()
; - un rând de la o anumită poziție se obține prin intermediul
metodei
getAddressLine()
;
- numărul de linii dintr-o adresă este furnizat de metoda
- 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 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ă.
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.
Notificările vor fi generate:
-
când utilizatorul intră în zona de restricție geografică
-
când utilizatorul iese din zona de restricție geografică
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 obține evenimentul legat de zona de restricție geografică, din
cadrul intenției cu care a fost lansat în execuție serviciul
GeofencingEvent geofencingEvent = GeofencingEvent.fromIntent(intent);
- se verifică dacă evenimentul legat de zona de restricție geografică
conține vreo eroare (prin apelul metodei
hasError()
), aceasta fiind tratată corespunzător (se jurnalizează eroarea și metoda se termină):GeofenceStatusCodes.GEOFENCE_NOT_AVAILABLE
GeofenceStatusCodes.GEOFENCE_TOO_MANY_GEOFENCES
GeofenceStatusCodes.GEOFENCE_TOO_MANY_PENDING_INTENTS
.
- se obține tipul de tranziție geografică
int geofenceTransition = geofencingEvent.getGeofenceTransition();
- se construiește un mesaj explicativ conținând
- tipul tranziției:
Geofence.GEOFENCE_TRANSITION_ENTER
/Geofence.GEOFENCE_TRANSITION_EXIT
; - identificatorii restricțiilor legate de poziționarea geografică:
- se obține lista tuturor restricțiilor legate de poziționarea
geografică
List<Geofence> triggeringGeofences = geofencingEvent.getTriggeringGeofences();
- se parcurge lista și pentru fiecare obiect se obține
identificatorul unic (
getRequestId()
);
- se obține lista tuturor restricțiilor legate de poziționarea
geografică
- tipul tranziției:
- se transmite mesajul explicativ prin intermediul unei notificări (ca
parametru al metodei
sendNotification()
).
10. Să se încarce modificările realizate în cadrul depozitului 'Laborator11' de pe contul Github personal, folosind un mesaj sugestiv.
student@eg-106:~/Laborator11$ git add *
student@eg-106:~/Laborator11$ git commit -m "implemented taks for laboratory 10"
student@eg-106:~/Laborator11$ git push Laborator11_perfectstudent master