Top Banner
Dispozitive și aplicații mobile Cursul 12
41

Dispozitive și aplicații mobile

Apr 19, 2022

Download

Documents

dariahiddleston
Welcome message from author
This document is posted to help you gain knowledge. Please leave a comment to let me know what you think about it! Share it to your friends and learn new things together.
Transcript
Page 1: Dispozitive și aplicații mobile

Dispozitive și aplicații mobile

Cursul 12

Page 2: Dispozitive și aplicații mobile

Sumar

• Utilizarea serviciilor Android• Determinarea poziției geografice• Google Maps în aplicații

Page 3: Dispozitive și aplicații mobile

SERVICII

Page 4: Dispozitive și aplicații mobile

Servicii

• Rutine care rulează în paralel cu firul principal • Nu prezintă interfaţă grafică • Permit derularea unor acţiuni în fundal fără a bloca firul

principal de execuţie şi interacţiunea cu aplicaţiile• Servicii predefinite (sistem) și servicii utilizator

Page 5: Dispozitive și aplicații mobile

Servicii

• Servicii locale– Rulează în același proces cu aplicația care a pornit serviciul

• Servicii la distanță– Rulează în propriul proces– Comunicare inter-proces

• RPC, AIDL (Android Interface Definition Language) etc.

Page 6: Dispozitive și aplicații mobile

Servicii de sistem

• Servicii predefinite– Notificare– Conectivitate– Descărcare fișiere– Alarme– Localizare etc.

• Gestionate prin clase specializate• Acces prin intermediul clasei Context

Page 7: Dispozitive și aplicații mobile

Servicii predefinite

• getSystemService(String serviciu) – clasa Context– serviciu:

• șir de caractere cu numele acestuia, definit în clasa Context

– returnează un obiect de tipul serviciului:• LocationManager• AudioManager• DownloadManager• WiFiManager etc.

prin intermediul căruia acesta este utilizat.

Page 8: Dispozitive și aplicații mobile

Servicii predefinite

Servciu Constantă asociată (clasa Context)

Alarm ALARM_SERVICE

Bluetooth AUDIO_SERVICE

Location LOCATION_SERVICE

Notification NOTIFICATION_SERVICE

Sensor SENSOR_SERVICE

Telephony TELEPHONY_SERVICE

Wifi WIFI_SERVICE

Page 9: Dispozitive și aplicații mobile

PendingIntent

• Mesaj transmis unei aplicații pentru efectuarea unor operații cu permisiunile aplicației sursă

• Acțiunea se execută în viitor– Aplicația care a transmis mesajul poate să fie inactivă în momentul

execuției acestuia

Page 10: Dispozitive și aplicații mobile

PendingIntent• Implementează interfața Parcelable• Parametri de inițializare

– context, identificator, Intent, indicatori• Inițializare (metode statice)

– Pentru lansarea unei activități• getActivity()

– Pentru transmiterea unui mesaj global• getBroadcast()

– Pentru lansarea unui serviciu• getService()

• Indicatori– FLAG_ONE_SHOT, FLAG_NO_CREATE, – FLAG_CANCEL_CURRENT, FLAG_UPDATE_CURRENT

Page 11: Dispozitive și aplicații mobile

Servicii predefinite – Exempluprivate final int NOTIF_ID = 1; String url = "url valid";

//initializare manager notificariNotificationManager notifMgr = (NotificationManager)

getSystemService(NOTIFICATION_SERVICE);

//comportamenul la click pe notficareIntent intentNotificare = new

Intent(Intent.ACTION_VIEW, Uri.parse(url)); PendingIntent pendingIntent =

PendingIntent.getActivity(this, 0, intentNotificare, 0);

Page 12: Dispozitive și aplicații mobile

Servicii predefinite – Exemplul 1 (cont.)Notification notif = new Notification.Builder(this)

.setContentTitle("Notificare")

.setSmallIcon(R.drawable.icon)

.setContentText("Serviciu Info")

.setContentIntent(pendingIntent).build()

//transmiterea notificarii notifnotifMgr.notify(NOTIF_ID, notif);

//Pentru oprirea notificărilor:notifMgr.cancel(NOTIF_ID);

Page 13: Dispozitive și aplicații mobile

Servicii predefinite – Exemplul 2

DownloadManager dManager = (DownloadManager) getSystemService(

Context.DOWNLOAD_SERVICE);

Request request = new Request(Uri.parse(urlCurs));

request.setDescription("PDM - Curs");long idd = dManager.enqueue(request);

Page 14: Dispozitive și aplicații mobile

Servicii predefinite – Exemplul 2 (cont.)//asociere receptorregisterReceiver(descarcat, new IntentFilter(

DownloadManager.ACTION_DOWNLOAD_COMPLETE));

//definire receptorBroadcastReceiver descarcat = new BroadcastReceiver() {

public void onReceive(Context ctxt, Intent intent) { //fișierul a fost descărcat}//eliminare asociere receptorunregisterReceiver(descarcat);

Page 15: Dispozitive și aplicații mobile

Servicii utilizator

• Derivare din clasa Service• Derivare din clasa IntentService• Declarare în fișierul manifest XML

<application ... ><service android:name=".Serviciu" />...

</application>

Page 16: Dispozitive și aplicații mobile

DETERMINAREA POZIȚIEI GEOGRAFICE

Page 17: Dispozitive și aplicații mobile

Poziționarea geografică

• Se utilizează serviciul de localizare identificat prin nume:Context.LOCATION_SERVICE– Se obține un obiect de tip LocationManager

• Localizare prin diferite surse:– Receptorul GPS– Rețele WiFi, celule mobile

• Permisiuni– android.permission.ACCESS_FINE_LOCATION– android.permission.ACCESS_COARSE_LOCATION

Page 18: Dispozitive și aplicații mobile

Poziționare geografică

• Inițializare serviciu de localizare• Asocierea unui obiect de tip listener cu precizarea:

– Sursei utilizată la localizare– Intervalul de timp la care se face actualizarea datelor

• Notificări în momentul apariției de modificări legate de:– Poziția geografică– Starea sursei de localizare

• Întreruperea asocierii cu obiectul de tip listener• Frecvența de actualizare!

Page 19: Dispozitive și aplicații mobile

Asociere furnizori serviciu de localizare • Metoda requestLocationUpdates() din clasa LocationManager• Informări cu privire la modificările poziției geografice: obiecte de tip

LocationListener sau PendingIntent• Parametri comuni:

– Intervalul minim de actualizare– Distanța minimă de actualizare (corelată cu intervalul de actualizare)

• Alți parametri– Sursa de localizare:

• Constanta GPS_PROVIDER sau NETWORK_PROVIDER (LocationManager) • unui criteriu de selecție (clasa Criteria)

– Obiectul care implementează interfața LocationListener sau obiectul de tip PendingIntent

• Metoda requestSingleUpdate()

Page 20: Dispozitive și aplicații mobile

Eliminarea asocierii

• Metoda removeUpdates() din clasa LocationManager• Parametrul

– Obiectul de tip LocationListener– Obiectul de tip PendingIntent

Page 21: Dispozitive și aplicații mobile

Clasa LocationManager

• Obținerea ultimei poziții cunoscute– Location getLastKnownLocation(String sursa)

• Informații despre starea receptorului GPS– GpsStatus getGpsStatus(GpsStatus status)

• Selectarea celui mai bun furnizor pe baza criteriilor definite– String getBestProvider(Criteria criteriu,

boolean doarFurnizoriActivi)

Page 22: Dispozitive și aplicații mobile

Interfața LocationListener

• Recepționarea de notificări la modificarea poziției geografice– Pe baza cerințelor de actualizare (interval și distanță)

• Metoda principală– void onLocationChanged(Location poz)

• Coordonatele accesibile prin clasa Location

• Alte metode– onProviderEnabled()– onProviderDisabled() – onStatusChanged()

Page 23: Dispozitive și aplicații mobile

Clasa Location

• Coordonate– getLatitude(), getLongitude(), getAltitude()

• Viteza– getSpeed()

• Timp– getTime()

• Acuratețea localizării– getAccuracy()

• Alte informații

Page 24: Dispozitive și aplicații mobile

Poziționare geografică - Exempluclass LocListener implements LocationListener {

@Overridepublic void onLocationChanged(Location poz) {

/*poz.getLatitude(), poz.getLongitude(), poz.getAltitude(); */ }

//…}

Page 25: Dispozitive și aplicații mobile

Poziționare geografică - ExempluLocListener locListener = new LocListener();

LocationManager locManager = (LocationManager) getSystemService(Context.LOCATION_SERVICE);

//asociere furnzizor servicii localizarelocManager.requestLocationUpdates(

LocationManager.GPS_PROVIDER, 0, 0, locListener);

//dezactivare asociare servicii localizarelocManager.removeUpdates(locListener);

Page 26: Dispozitive și aplicații mobile

Obținerea adreselor

• Clasa Geocoder• Servicii de backend• Determinare disponibilitate serviciu

– Metode statică isPresent()

• Inițializare– Constructor cu un parametru de tip Context

• Permisiune INTERNET

Page 27: Dispozitive și aplicații mobile

Obținerea adreselor• Metode

– getFromLocation(lat, long, nrMaxAdrese)– getFromLocationName()

• Liste de adrese– Clasa Address– List<Address>

• Clasa Address– getCountry()– getCountryCode()– getLocality()– getAddressLine() etc.

Page 28: Dispozitive și aplicații mobile

Obținerea adreselorif (Geocoder.isPresent()) {

Geocoder geocoder = new Geocoder(getApplicationContext());try {

List<Address> adrese = geocoder.getFromLocation(lat, lon, 1);if (adrese.size() > 0) {

//adrese.get(0).getCountryName() //adrese.get(0).getLocality()) //etc.

}}catch (IOException ex) {

ex.printStackTrace();}

}

Page 29: Dispozitive și aplicații mobile

UTILIZAREA GOOGLE MAPS

Page 30: Dispozitive și aplicații mobile

Google Maps

• Google Maps API v2• Se bazează pe serviciul Google Maps• Biblioteca opțională• Inclusă în Google Play services

– Categoria Extras în SDK Manager• Google Play services APK trebuie să fie instalat și pe dispozitivul

mobil• Facilități

– hărți 3D, interior, satelit, teren, trafic, marcaje, plane suprapuse, trasare linii etc.

Page 31: Dispozitive și aplicații mobile

Inițializare

• Înregistrare la Google Maps Service pentru obținerea unei chei pentru Maps API– https://code.google.com/apis/console– Cheia va fi inclusă în fișierul AndroidManifest.xml

• Instalare Google Play services SDK• Adăugarea proiectului bibliotecii Google Play services la spațiul

de lucru• Referirea bibliotecii Google Play services în proiectul de lucru

Page 32: Dispozitive și aplicații mobile

Clase Google Maps API v2

• Pachetul com.google.android.gms.maps• MapView

– Control care încapsulează o hartă

• MapFragment, SupportMapFragment– Fragment care încapsulează o hartă

• UiSettings– Control setări interfața hartă

Page 33: Dispozitive și aplicații mobile

Inițializarea hărții

• Inițializare– Clasele MapFragment, MapView sau SupportMapFragment– Metoda getMapAsync()

• Interfața OnMapReadyCallback– Metoda onMapReady(GoogleMap map)

• Stabilirea tipului hărtii– Metoda setMapType(tip_harta)

• MAP_TYPE_NORMAL, MAP_TYPE_SATELLITE, MAP_TYPE_TERRAIN

Page 34: Dispozitive și aplicații mobile

Control setări

• Clasa UiSettings• Inițializare: getUiSettings()• Facilități

– Controale mărire/micșorare– Activare gesturi control– Afișare busolă– Buton localizare– Bară controale

Page 35: Dispozitive și aplicații mobile

Control cameră• Parametri vizualizare

– Locație– Unghi înclinare– Zoom

• Clase– CameraUpdate– CameraPosition– Obținere CameraUpdate

• CameraUpdateFactory• Metode

– moveCamera(CameraUpdate)– animateCamera(CameraUpdate)

Page 36: Dispozitive și aplicații mobile

Clasa GoogleMap - Adăgarea de figuri geometrice

• Cerc– Circle addCircle(CircleOptions)

• Linii– Polyline addPolyline(PolylineOptions)

• Imagine– GroundOverlay addGroundOverlay(GroundOverlayOptions)

• Poligon– Polygon addPolygon(PolygonOptions)

Page 37: Dispozitive și aplicații mobile

Marcaje

• Clasa Marker– Pictograme pe hartă– Proprietăți

• Titlu • Poziție (coordonate) – LatLng (latitudine și longitudine)• Pictogramă• etc.

– Metoda addMarker(MarkerOptions) din clasa GoogleMaps• Clasa MarkerOptions

– Stabilire opțiuni obiect de tip Marker

Page 38: Dispozitive și aplicații mobile

Google Maps – Implementare

• Fișierul xml asociat (res/layout)– fragment

• android:id="@+id/harta"• android:name="com.google.android.gms.maps.MapFragment"

• Fișierul java asociat– MapFragment mf = ((MapFragment) getFragmentManager()

.findFragmentById(R.id.harta)) ; – mf.getMapAsync(onMapReadyCallback);

Page 39: Dispozitive și aplicații mobile

Google Maps – Implementare@Overridepublic void onMapReady(GoogleMap googleMap) {

LatLng latLong = new LatLng(lat, longit);map.setMyLocationEnabled(false);map.moveCamera(CameraUpdateFactory.

newLatLngZoom(latLong, 18));Marker marker = map.addMarker(new MarkerOptions().position(latLong));marker.setTitle(locatie);marker.showInfoWindow();

}

Page 40: Dispozitive și aplicații mobile

AndroidManifest.xml

• Permisiuni (minim):– ACCCES_FINE_LOCATION pentru map.setMyLocationEnabled(true)

• Cheia Google Maps API– <meta-data android:name="com.google.android.maps.v2.API_KEY"

android:value="cheia generata" />

Page 41: Dispozitive și aplicații mobile

Bibliografie

• S. Komatineni, D. MacLean – Pro Android 4, Apress, 2012• R. Meier – Professional Android 4 Application Development,

Wiley, 2012 • P. Pocatilu, Programarea dispozitivelor mobile, Editura ASE,

2012• P. Pocatilu, I. Ivan ș.a. – Programarea aplicațiilor Android,

Editura, ASE, 2015• http://developer.android.com