41
Dispozitive și aplicații mobile Cursul 12

Dispozitive și aplicații mobile

  • Upload
    others

  • View
    9

  • Download
    0

Embed Size (px)

Citation preview

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