Sunteți pe pagina 1din 31

Curs 1-4

Programarea mobila multiplatforma

Platforme mobile diverse:

- Android
- iOS
- Windows Phone
- Universal Windows Platform (Windows 10 Mobile, Windows 10)

Aplicatii Web – redate intr-un control inclus intr-o aplicatie nativa sau in browser

Aplicatii native – generate pentru fiecare platforma selectata

Aplicatii hibride – ruleaza intr-o aplicatie container nativa

 Utilizarea unui singur limbaj de programare/tehnologii


 Disponibil pentru multiple platforme mobile
 Utilizarea de tehnologii cunoscute
 Dezvoltarea rapida de aplicatii mobile
 Adaugarea unui nivel intermediar pentru a avea performante mai bune
 Accesul la API nativ poate fi limitat
 Nu sunt incluse toate platformele mobile
 Limitari la utilizarea bibliotecilor externe

- Apache Cordova (Adobe PhoneGap, Ionic)


- Appcelerator Titanium (JavaScript)
- Xamarin

Platforma Xamarin

Xamarin

- a fost creata de Microsoft in 2016

- bazata pe implementari multiplatforma .Net

- are avantajele limbajului C# si ale platformei .Net

- intergrare cu visual studio

- biblioteci specific principalelor platforme mobile

1
Tipuri de aplicatii:

- Native (Android, iOS)


- Multiplatforma (Native, Xamarin.Forms, (proiectele pot partaja biblioteci))

Xamarin.Forms

- Independenta de platforma
- Partajarea codului
- Bazat pe XAML (Extensible Application Markup Language)

 Shared Libraries
 Portable Class Libraries(PCL)
 .NET Standard Libraries

Proiecte partajare (shared)

- Partajarea codului intre platforme


- Include directive de compilare conditionate pentru fiecare platforma
- Posibilitatea de utilizare a bibliotecilor native in proiectele fiecarei platforme
- Codul partajat nu este disponibil ca biblioteca

Proiecte Portabile (PCL)

- Codul partajat este disponibil ca biblioteca (util la partajarea codului intre mai multe proiecte)
- Nu se utilizeaza directive de compilare
- Facilitatile .Net sunt limitate in functie de profilul utilizat

Tipuri de proiecte Xamarin


 Android
 iOS
 Cross-platform
 Windows Universal

Xamarin.Forms
- Aplicatii pentru introducerea datelor
- Prototipizare
- Interactiune redusa cu platforma
- Partajarea codului vs interfata grafica personalizata

2
Xamarin nativ
- Aplicatii care necesita interactiuni specifice
- Designul aplicatiei pretentios
- Access la un numar ridicat de API-uri
- Interfata grafica personalizata vs partajarea codului

Proiecte generate

- Proiect (partajat)
- Proiect.Android
- Proiect.iOS
- Proiect.UWP

Interfata utilizator
- Fisiere XAML si cod sursa C#
- Cod sursa C#

Ciclul de viata al aplicatiei:

- Initializare – onStart()
- Intrare in starea inactiv – onSleep()
- Iesire din starea inactiv – onResume()

XAML
- Limbaj descriptiv, bazat pe XML
- Construirea declarativa a interfetei cu utilizatorul
- Fisierele XAML permit definirea:
 interfetei cu utilizatorul (ierarhie de componente)
 Sabloanelor
 Legaturilor de date (statice si dinamice)
 Stilurilor/resurselor statice si dinamice
- Spatiul de nume implicit specific Xamarin.Forms
- Spatiul de nume “x” specific XAML
- Proprietati implicite
o Content (pt ContentPage, ContentView, Frame, ScrollView)
o Text (pt Label)
o Children (pt obiectele de tip Layout)
o View (pt ViewCell)

XAML – Atribute

- X:Class – numele clasei asociat paginii


- X:Key – pentru referirea resurselor din dictionare

3
- X:Name – pentru referirea controalelor din cadrul fisierului sursa

XAML – Extensii

- {Element Valori}
- Element :
o Binding – legarea dinamica a continutului (StringFormat)
o StaticResource – asocierea unei resurse (stil) – “Proprietate={StaticResource
cheieResursa}”

Interfata utilizator
- Pagini
- Containere
- Componente vizuale (celule)
- Ferestre de dialog si informare
- Legarea dinamica a datelor

Clase de baza

- Element
o Cell
o VisualElement
 View
 Layout
 Controale
 Page
 Pagini
 Multipage

Pagini

Tipuri de navigare in aplicatii:

- Ierarhica
- Modala
- Lista de optiuni
- Meniu lateral
- Selectori
- Dashboard/springboard
- Panorama/carusel

Pagina (Page)

- Android: activitate
- iOS: View Controller
- Windows Universal Platform (UWP): Page

4
- Elementul radacina al fisierelor XAML

Tipuri de pagini:

- ContentPage
- MasterDetailPage
- NavigationPage
- TabbedPage
- CarouselPage

Clasa Page

- Clasa de baza pentru pagini


- Proprietati
o Title
o Icon
o Padding
o BackgroundImage
o ToolBarItems
- Metode din ciclul de viata
o OnAppearing
o OnDispappearing
o OnBackButtonPressed

ContentPage

- Afiseaza o singura componenta


- Continutul referit prin proprietatea Content
- Utilizate frecvent ca pagini componente ale altor tipuri de pagini

NavigationPage

- Gestioneaza navigarea intre pagini (stiva de pagini)


- Necesita o componenta de tip pagina asociata
- Metode
o SetTitleIcon()
o SetHasNavigationBar()
- Proprietati
o BarBackgroundColor
o BatTextColor

Navigarea intre pagini

- Proprietatea Navigation
- Stiva de navigare
o PushAsync(pagina)
o PopAsync()

5
o PopToRootAsync()
- Navigarea modala
o PushModalAsync(pagina)
o PopModalAsync()

Evenimente generate de navigarea modala(clasa aplicatie)

- Modal Pushing : componenta vizuala este afisata modal


- Modal Pushed : componenta vizuala a fost afisata modal
- Modal Popping : componenta vizuala este eliminata modal
- Modal Popped : componenta vizuala a fost eliminata modal

Navigation Page

- Initializare:
MainPage = new NavigationPage(new Pagina1());

TabbedPage

- Include selectori pentru afisarea continutului specific


- Selectorii sunt activati prin interactiune directa
- Refera mai multe pagini asociate selectorilor
- Proprietati:
o itemSource
o CurrentPage
o SelectedItem

MasterDetailPage

- Meniuri laterale derulante


- Pagina include referinte catre:
o Pagina principala (master)
o Pagina de detalii (detail)
- Proprietatea MasterDetailPage.Master – refera pagina principala
- Proprietatea MasterDetailPage.Detail – refera o pagina de detalii
- IsPresented
o True – pagina principala este afisata
o False – pagina de detalii este afisata

MasterBehavior

- Default – afisare implicita platformei


- Popover – pagina de detalii acopera (partial sau total) pagina principala
- Doar tablete :
o Split – pagina principala este afisata in stanga iar pagina de detalii in dreapta
o SplitOnLandscape – ecranul este impartit intre cele 2 pagini la orientarea orizontala
o SplitOnPortrait – ecranul este impartit intre cele 2 pagini la orientarea verticala

6
CarouselPage

- Posibilitatea de derulare a continutului pe orizontala


- Continutul este initializat prin intermediul obiectelor de tip ContentPage

Containere:

- StackLayout
- Grid
- AbsoluteLayout
- RelativeLayout
- Frame
- ScrollView

StackLayout

- Pozitionarea controalelor pe verticala/orizontala, unul dupa celalalt


- Implicit: controalele sunt pozitionate pe verticala, de sus in jos, sub forma unei stive in ordinea
adaugarii
- Controlul pozitionarii
o Proprietatea Orientation
o Valorile Vertical (implicit) sau Horizontal

Grid

- Pozitionarea elementelor pe linii si coloane


- Definirea structurii tabelului:
o Colectiile RawDefinitions si ColumnDefinitions
o Proprietatiile RawDefinition si ColumnDefinition
- Dimensiuni
o Height, Width
 Auto – determinare automata
 * - alocare proportionala
 Valoare_numerica – dimensiune absoluta
- Pentru fiecare control se precizeaza
o Linia si coloanal in care va fi plasat
o Numarul de linii/coloane ocupate
- Referirea coloanelor si liniilor
o Proprietatea Grid.Column, respective, Grid Row
- Numarul de coloane/linii ocupate de o celula
o Proprietatile ColumnSpan, respectiv, RowSpan

AbsoluteLayout

- Permite pozitionarea componentelor vizuale


o Absolut (coordonatele containerului)
o Proportional (relative la dimensiunile containerului)(
o Mixt

7
- Pozitionarea se realizeaza pe baza
o Punctului de ancorare (X,Y)
o Dimensiunii (Width, Height)

RelativeLayout

- Pozitionarea si dimensionarea componentelor vizuale se realizeaza relative la container sau la


alte componente vizuale
- Bazate pe restrictii
o Relativ la parinte
o Relativ la alta componenta

Frame

- Derivat din ContentView


- Contine un singur element

ScrollView

- Permite derularea continutului


- Include o singura componenta parinte
- Permite derularea
o Pe verticala (implicit)
o Pe orizontala
o Si pe orizontala si verticala

Componente vizuale

Afisare/introducere text

- Label
o Text static
- Entry
o Text pe o singura linie
o Proprietate placeholder
- Editor
o Text pe mai multe linii
o Proprietatea placeholder
- SearchBar
o Control pt cautare
o Proprietatile SearchCommand, Placeholder

Butoane

- Button

8
o Buton standard
- Stepper
o Butoane care permite alegerea incrementala a unei valori intr-un interval
o Proprietatile Value, Minimum, Maximum, Increment
o ValueChanged
- Switch
o Buton cu doua stari
o Proprietatea IsToggled

Data/Timp

- DatePicker
o Selectie data
o Proprietatile Date,Format, MaximumDate, MinimumDate
- TimePicker
o Selectie ora/minute
o Proprietatile Time, Format

Selectie

- ListView
o Lista de elemente cu posibilitatea de selectie
- Picker
o Selectie element dintr-o lista
o Proprietatile Items, SelectedIndex, Title
- Slider
o Selectie intr-un interval
o Proprietatile Value, Minimum, Maximum
o ValueChanged

Progres

- ActivityIndicator
o Indicator de progress circular, nedeterminat
- ProgressBar
o Indicator de progress orizontal
o Proprietatea progress

Grafica/Imagini

- BoxView
o Control pentru desenarea unei suprafete dreptunghiulare
o Dimensiuni implicite (40x40)
o Proprietatea Color
- Image
o Control pentru afisarea de imagini
o Proprietatile Source, Aspect (modul de scalare)
- OpenGLView

9
o Support pt OpenGL
o Disponibil pt Android si iOS

Controale Complexe

- TableView
- WebView
o Redare continut Web
o Proprietatea Source

ListView

- Colectie de elemente de acelasi tip


- O celula sablon
- Afisare obiecte de tip View

Table View

- Prezentare sub forma tabelara: linii si coloane


- Elemente de acelasi tip sau tipuri diferite
- Setari, introducere date, afisare date neomogene
- Radacina
o tableRoot
- Sectiuni
o TableSection
- Proprietatea Intent, pt optiuni de afisare/utilizare
o Data – afisare date
o Form – utilizare formular
o Menu – meniu de optiuni
o Settings – setari
- Celule sablon

Celule

- Sabloane pt crearea de elemente vizuale pentru controale associate tabelelor


o ListView
o TableView
- Include eticheta pe langa continut
- Celule predefinite
- Celule personalizate

Celule predefinite

- EntryCell
- TextCell
- ImageCell
- SwitchCell
- ViewCell

10
Sabloane elemente colectii

- Colectie.ItemTemplate
- DataTemplate

Meniuri

- Definite prin colectia ToolBatItems din clasa Page


- Clasa ToolBarItem
o Text
o Icon
o Order
 Primary (optiunea afisata ca imagine, daca exista)
 Secondary (optiunea doar text)
o Evenimentul Clicked

Operatii Asincrone

- Cuvinte cheie C# : await si async


- Async:
o Modificatory pt metode: metode asincrone
o In cadrul metodelor exista operatii asincrone
- Await
o Apelarea unei functii asincrone
- Operatiile de durata sunt executate fara blocarea firului current
- Rezultatul functiilor este de tip
o Void
o System.Threading.Tasks.Task
o Task<TipRezultat>

Ferestre de dialog/informare

- Metode in clasa Page


- Task DisplayAlert(String, String, String)
- Task<bool> Display(String, String, String, String)
- Task<string> DisplayActionSheet(String, String, String, String [])
o Afiseaza o lista de optiuni

Legarea dinamica a datelor

- Asocierea unei proprietati (destinatie) cu o proprietate sursa


- Valoarea proprietatii sursa este preluata de proprietatea destinatie (posibil si invers)
- Moduri

11
o O singura cale (sursa – destinatie)
o Ambele sensuri (sursa – destinatie, destinatie – sursa)
- Proprietatea sursa
o Obiect
o Control
- Asociere
o XAML
o Cod sursa
o Mixt

ICommand

- Metode
o Void execute(object)
o Bool canExecute(object)
- Eveniment
o canExecuteChanged
o

MVVM – Model -View – ViewModel

Model

- datele aplicatiei (access la baze de date, preluare retea etc)

View

- interfata utilizator
- implementata usual prin fisierele XAML

ViewModel

- legatura intre date si interfata


- genereaza evenimente la modificari ale datelor
o sursa de date sau din interfata

Accesul la retea
- operatii asincrone
- tartare exceptii
- multiple pachete
o NuGet Package Manager

12
Stocarea persistenta a datelor
- Pachetul SQLite
- Clasa SQLiteConnection
- Decorarea cu attribute a claselor din model

Curs 5-6

Android Jetpack

- Colectie de biblioteci, instrumente si bune practice arhitecturale


- Componente
o Fundamentale
o Arhitectura
o Comportament
o Interfata grafica
- Includerea bibliotecilor Android Support in AndroidX
- Pachetul androidx.*

o Foundation
 AppCompat
 Test
o Architecture
 Ciclul de viata
 Legarea dinamica a datelor
 Baze de date
 viewModel
 paginare
 navigare
 operatii asincrone
o Behavior
 Media si redare
 Preferinte
 Partajare
 Notificari
o UI
 Auto
 Animatii
 Fragmente
 TV

13
 Wear OS

Material Design

Specificatii de design pentru o experienta unitara pe dispositive diferite, de dimensiuni diferite

- Teme noi
- Controale noi
- Animatii
- Efecte de umbrire

Componente support pentru material design

- Controlul comportamentului si dependente


o coordinatorLayout
o NestedScrollView
- Bara aplicatiei
o Toolbar
o AppBarLayout
o CollapsingToolbarLayout
- Navigare
o DrawerLayout si NavigationView
o BottomNavigationView
o TabLayout si ViewPager
- Informare
o Snackbar
o BottomSheetBehavior
o BottomSheetDialog/BottomSheetFragmentDialog
- Colectii de elemente
o RecyclerView
- Afisare continut
o ConstraintLayout
o CardView
- Validare
o TextInputLayout
- Controale
o Floating Action Button (FAB)

Item Decoration

- Desenarea peste elemente


- Utilizat pentru

14
o Personalizare
o Evidentiere
o Desenarea de separatori
- Pot exista mai multe obiecte de tip ItemDecoration
o Apelate in ordinea adaugarii
- Asociere
o Metoda addItemDecoration()

DividerItemDecoration

- Separator implicit pentru elemente


- Constructor
o Contextul
o Pozitionarea elementelor (orizontala sau verticala)

ItemDecoration

- Desenare intainte de afisarea continutului elementului


o onDraw()
- desenare peste continutul elementului
o onDrawOver()
- calcularea dimensiunii elementului
o getItemOffsets()

Tratarea evenimentelor

- implementare interfata View.OnClickListener


- implementare interfata RecyclerView.OnItemTouchListener

Implementare interfata View.OnClickListener

- obiectul de tip View din constructorul ViewHolder


o setOnClickListener()
- in onBindViewHolder() se stocheaza in ViewHolder elementul corespunzator din sursa de date
- se implementeaza onClick(View)
o View – elementul apasat
o Se testeaza in prealabil daca este initializat un element din sursa de date asociata

Implementare interfata RecyclerView.OnItemTouchListener

- Metode interfata
o onInterceptTouchEvent()
 determinare element si pozitie
o onTouchEvent()
o onRequestDisallowInterceptTouchEvent()
- determinarea actiunilor de apasare/ apasare prelungita
o GestureDetector

15
- Definire interfata noua in cadrul clasei
o Metode pentru apasare/apasare prelungita pe element

Curs 7-8

Location API

Pozitionarea geografica

- Se uitilizeaza serviciul de localizare identificat prin nume: Context.LOCATION_SERVICE


o Se obtine un obiect de tip LocationManager
- Localizare prin diferite surse:
o Receptorul GPS
o Retele WiFi, celule mobile
- Permisiuni
o Android.permission.ACCESS_FINE_LOCATION
o Android.permission.ACCESS_COARSE_LOCATION
- Initializare serviciu de localizare
- Asocierea unui obiect de tip listener (LocationListener) cu precizarea:
o Sursei utilizata de localizare
o Intervalul de timp la care se face actualizarea datelor
- Notificari in momentul aparitiei modificarilor (metoda onLocationChanged())
o Pozitiei geografice
o Starii sursei de localizare
- Intreruperea asocierii cu obiectul de tip listener
- Frecventa de actualizare

Clasa Location

- Coordinate
o getLatitude(), getLongitude(), getAltitude()
- viteza
o getSpeed()
- timp
o getTime()
- acuratetea localizarii
o getAccuracy()
- alte informatii

Serviciul de localizare google location services api

- google play services

16
- fused location provider
o combina furnizorii disponibili in functie de cerintele aplicatiei
 precizie
 consum de energie
o selectarea celui mai potrivit seviciu

Pozitionare geografica

1. incepand cu google api 11.x


2. se utilizeaza FusedLocationProviderClient
a. intern, initializeaza clientul Google API
3. Parametrii specifici (acuratetea, intervalul, etc) se gestioneaza prin intermediul unui obiect de
tip LocationRequest
4. Implementare clasa pentru receptionarea pozitiei curente
a. LocationCallback, metoda onLocationResult()

Receptori de mesaje

Transmiterea si receptionarea mesajelor globale

- La nivel global pot fi transmise mesaje


- Mesajele pot fi transmise din aplicatii:
o Din sistem
o Utilizator
- Aplicatiile pot reactiona la aparitia mesajelor transmise global, la nivelul sistemului
- Exemple:
o Finalizarea descarcarii unui fisier
o Identificarea unui dispozitiv (NFC, Bluetooth, etc)
o Nivelul bateriei etc

Mesaje globale

- Intent.ACTION_BATTERY_LOW
- Intent.ACTION_BOOT_COMPLETED
- Intent.ACTION_MEDIA_MOUNTED
- Intent.ACTION_SCREEN_OFF
- Telephony.Sms.Intents.SMS_RECIVED

Transmiterea mesajelor globale

- Mesajele sunt transmise:


o Fara prioritate
 sendBroadcast()
o cu prioritati
 sendOrderedBroadcast()
- parametrul comun:
o mesajul (intent)

17
- O forma care include:
o Permisiunea necesara (String)

Receptionarea mesajelor globale

- Se implementeaza clasa abstracta BroadcastReceiver


- Receptorii nu prezinta interfata grafica
- O aplicatie poate avea mai multe componente de acest tip
- Include filtre de mesaje

Inregistrarea receptorilor

- Receptorii sunt inregistrati


o Static: fisierul manifest XML (elementul receiver)
 API 26: cu anumite exceptii, nu maii receptioneaza mesaje implicite
o Dinamic: codul sursa
- Receptorul
o Independent (XML)
o Legat de componenta in care este definit (Java)

Clasa de tip receptor de mesaje

- Implementarea clasei abstracte BroadcastReceiver


- Metoda onReceive()

Prelucrarea mesajelor

- Metoda onReceive(Context, Intent)


o Mesajul este primit ca parametru
o Prelucrari la receptionarea mesajului
o Reprezinta durata de viata a unui receptor
- Oprirea retransmiterii mesajului in system (pentru mesajele cu prioritati)
o abortBroadcast()

Inregistrarea dinamica a receptorilor (Java)

- creare obiect de tip IntentFilter


- instantierea unui obiect de tip receptor
- inregistrarea unui receptor
o registerReceiver()
- deconectarea receptorului
o unregisterReceiver()

18
Mesaje locale

- posibilitatea de transmitere a mesajelor in cadrul aceleiasi aplicatii


- Securitate sporita
- Eficienta
- Receptorul este implementat normal
- Pentru transmiterea mesajelor se utilizeaza clasa LocalBroadcastManager

- Clasa LocalBroadcastManager

o Android.support.v4.content
- Obtinere instanta
o LocalBroadcastManager.getInstance(Context)
- Transmitere mesaj
o sendBroadcast(Intent)
- Asociere receptor
o registerReceiver(BroadcastReceiver, IntentFilter)
- Terminare asociere
o unregisterReceiver(BroadcastReceiver)

Servicii

- rutine care ruleaza in parallel cu firul principal


- nu prezinta interfata grafica
- permit derularea unor actiuni in fundal fara a bloca firul principal de executie si interactiunea cu
aplicatiile
- servicii
o predefinite (sistem)
o servicii utilizator
- servicii
o locale
 usual, ruleaza in acelasi process cu aplicatia care a pornit serverul
o la distanta
 ruleaza in propriul process
 comunicare inter-proces
 RPC, AIDL (Android Interface Definition Language) etc
- Servicii
o Fara referinta
 Nu permit clientilor sa interactioneze cu acestea
 Doar pornire si terminare
 Initializare folosind metoda startService() din clasa Context
o Cu referinta

19
 Permit continuarea comunicarii din partea clientului dup ace acesta a fost
initializat
 Initializate prin metoda bindService() din clasa Context
- Servicii utilizator
o Derivate din clasa Service
o Ciclu de viata bine determinat
o Trebuie declarate in fisierul AndroidManifest.xml

Evenimente din ciclul de viata

- Crearea serviciului
o onCreate()
- pornirea serviciului – client startService()
o onStartCommand()
- conectarea la serviciu – client bindService()
o onBind()
- terminarea serviciului – client stopService()
o onDestory()

Servicii de tip IntentService

- derivare din clasa IntentService


- pune la dispozitie o metoda executata intr-un fir de executie distinct
- serviciul este oprit dupa finalizarea prelucrarilor din metoda invocate
- rezultatele sunt transmise printr-un mesaj (Intent)
o necesar un receptor de evenimente

Servicii la distanta

Comunicarea intre procese

- fisiere
- socket
- transmiterea de mesaje
- partajarea memoriei
- furnizori de continut
- intent
- messenger
- binder

20
Interfata IBinder

- descriere protocol de comunicare cu un obiect la distanta


- extinderea clasei Binder
- interfete AIDL
- clasa messenger
o implementeaza prin intermediul AIDL
o utilizeaza obiecte Handler si Message

Comunicarea cu serviciul

- limbajul AIDL (Android Interface Definition Language)


o asemanator java
- fisier .aidl
- include interfata cu metodele puse la dispozitie de serviciu
- compilatorul genereaza o interfata java

Interfata generate

- metodele puse la dispozitie de interfata serviciului


- clasa abstracta Stub
o extinde Binder
o implementeaza interfata generata
o include clasa Proxy
 implementeaza apelul metodelor din interfata

Serviciul

- extinde clasa abstracta Stub din interfata generata


o implementeaza metodele puse la dispozitie de serviciu
- metoda onBind()
o returneaza obiectul de tip Stub

Conectarea la serviciile la distanta

- implementarea interfetei ServiceConnection


o monitorizeaza starea conexiunii la serviciu
o metode
 onServiceConnected()
 onServiceDisconnected()
- metoda bindService()
o intent asociat componentei serviciului
o obiectul de tip ServiceConnection
o indicatori (repornirea/terminarea serviciului)

21
Terminarea executiei serviciului

- sunt retinute referinte la fiecare client conectat


- deconectarea clientilor
o metoda unbindService() din clasa Context
- terminarea serviciului
o apelul realizat de catre ultimul client ramas conectat la serviciu

Curs 9

Furnizori de continut

Partajarea datelor

- pentru partajarea datelor intre aplicatii se utilizeaza si furnizorii de continut


o pun la dispozitie un mechanism standardizat pentru transferal datelor in aplicatii
- surse de date
o fisiere
o baze de date
o alte surse (Internet)
- o alternativa la furnizorii de continut:
o comunicarea intre procese

Furnizorii de continut

- acces deseori ierarhic


- baza de date
- mai multe tabele
o coloane
o randuri
- referire prin URI
- continutul are asociat un tip MIME

Implementarea furnizorilor de continut

- definirea URI-ului asociat continutului


- implementarea clasei abstracte ContentProvider
- declararea furnizorului de continut in fisierul AndroidManifest.xml\

UriMatcher

- adaugare cai si asocierea de identificatory


- pe baza cailor furnizate este returnat identificatorul asociat

22
Implementarea clasei abstracte ContentProvider

- onCreate()
- getType()
- query()
- insert()
- update()
- delete()

Initializarea furnizorului de continut

- ruleaza in firul principal


- operatii reduse ca durata
o evitarea deschiderii bazei de date, operatii complexe, etc
- returneaza o valoare booleaza
o rezultatul initializarii furnizorului de continut

Tipul MIME asociat

- pereche de forma tip/subtip


o text/xml
o application/pdf

Interogarea datelor

- metoda query()
- parametrii
o identificatorul furnizorului de continut (URI)
o coloanele corespunzatoare datelor (proiectia)
o criteriul de selectie
o parametrii de selectie
o ordinea de sortare a acestora
- returneaza un obiect de tip Cursor

Inserarea

- metoda insert()
- parametrii
o identificatorul furnizorului de continut (URI)
o valorile associate inregistrarii (ContentValues)
- returneaza un URI asociat ingregistrarii inserate
o include identificatorul inregistrarii

Modificarea

- metoda update()
- parametrii
o identificatorul furnizorului de continut (URI)
 daca nu este inclus un identificator, modificarea se aplica tuturor inregistrarilor

23
o valorile associate campurilor care se vor modifica (ContentValues)
o criteriul de selectie
o parametrii de selectie
- returneaza numarul de inregistrari afectate

Stergerea inregistrarilor

- metoda delete()
- parametrii
o identificatorul furnizorului de continut (URI)
 daca nu este inclus un identificatory, vor fi sterse toate inregistrarile
o criteriul de selectie
o parametrii de selectie
- returneaza numarul de inregistrari afectate

Android Architecture components


- colectie de biblioteci
- gestiunea ciclului de viata
- arhitectura aplicatiei
- stocarea persistenta a datelor
- incarcarea graduala a datelor dintr-o sursa de date

ROOM

- nivel de abstractizare peste SQLite


- ORM (Object Relational Mapping)

Curs 10

Aplicatii de tip Widget

- Aplicatii care ruleaza in alt process


o Asociat aplicatiei gazda
- Include ferestre atasate ecranului principal
o Home screen
- Ocupa o suprafata reprezentata prin cellule
- Continutul este actualizat periodic la receptionarea notificarilor
- O aplicatie poate gestiona mai multe componente de acelasi tip
- Sunt definite pe baza receptorilor de mesaje

24
- Folosesc obiecte speciale pentru afisarea interfetei utilizator
o remoteViews
- transfer de date inter-proces

Interfata utilizator

- definite prin fisiere de resurse de tip macheta


- este expusa prin obiecte de tip RemoteViews
o obiectele sunt gestionate de system
- limitary in ceea ce priveste tipul controalelor ce pot fi utilizate
- controalele include atributul @RemoteViews

RemoteViews

- structuri care definesc o ierarhie de componente vizuale


- implementeaza interfata Parcelable
- transmise intre procese pentru actualizarea componentelor vizuale
- initializare obiect (Constructori)
- metode pentru modificarea starii controalelor
o identificatorul controlului
- metode pentru asocierea actiunii pentru evenimentul click

Fisierul xml cu proprietati

- salvat in directorul res/xml


- include proprietatile associate unei aplicatii de tip Widget
- referit in intrarea pentru receptor din fisierul manifest
- nodul radacina : appwidget-provider
- asociat clasei de tip AppWidgetProviderInfo

Receptorul

- asociat aplicatiei de tip Widget


- include metode specifice receptorilor de mesaje, dar si metode proprii
- are ca scop
o actualizarea interfetei
o definirea mecanismelor de tartare a evenimentelor generate de interactiunea cu
aplicatia

Activitatea de configurare

- configurarea si actualizarea aplicatiei


- lansata in momentul crearii aplicatiei
o RESULT_OK – aplicatia de tip Widget va fi amplasata pe ecran
o RESULT_CANCELED – aplicatia de tip Widget nu va fi adaugata pe ecran
- Activitatea primeste ca parametru prin mesaj identificatorul aplicatiei

25
Curs 11

Senzori

- Componente hardware
- Sursa de date pentru
o Masurarea miscarii, orientarii si conditiilor de mediu
o Determinarea pozitiei
- Exemple
o Accelerometru
o Giroscop
o Temperatura
o Proximitate
o Ambiental
- Posbilitatea de preluare a datelor

Utilizare senzori

- Initializarea serviciului
- Inregistrarea unui obiect (de tip listener) care va fi informat cu privier la modificarile aparute
o Obiectul este asociat unui sensor
o Metoda corespunzatoare este apelata periodic cu valorile preluate de la sensor
- Terminarea asocierii obiectului inregistrat

Senzori

- Pachetul android.hardware
- Servicii
o SENSOR_SERVICE
- Clasa SensorManager
- Clasa Sensor
- Interfata SensorEventListener

Obtinerea datelor de la senzori

- Interfata SensorEventListener
- Modificarile senzorilor
o Void onSensorChanged(SensorEvent event)
- Valorile citite disponibile prin SensorEvent

SensorManager

- Inregistrarea unui obiect care va fi informat cu privier la modificarile senzorului


o RegisterListener()
 Context, sensor, perioada informarii
- Eliminarea asocierii

26
o UnregisterListener()

Bluetooth
- Tehnologia permite schimbul de informatii fara fir intre diferite dispositive
- Viteze mult mai mari (vs. IR, NFC)
- Necesitatea imprerecherii dispozitivelor Bluetooth in vederea comunicarii
- Diferite profile (specificatii pentru comunicatii fara fir intre dispositive)
- Utilizarea protocolului RFCOMM (Radio frequency communication)

Transferul datelor

- Obtinerea fluxurilor de intrare/iesire associate socket-urilor


o inputStream/OutputStream
- citirea/scrierea din/in fluxuri
o read()/write()

NFC
- consortiul NFC Forum
- conectarea fara fir a 2 dispozitive aflate la o distanta foarte mica (de maxim 10cm)
- conectare in mod direct(fara imperechere sau descoperire reciproca)
- viteze reduse (sute de kbps)
- frecventa 13.56 MHz
- asigura schimbul de pachete de date intre
o etichete NFC si dispositive
o dispositive

Moduri de lucru

- citire/scriere (RFID)
o dispozitivul poate citi sau scrie informatii de pe sau pe etichete NFC passive
- peer-to-peer (P2P)
o dispozitivele NFC schimba date intre ele
o mod folosit de Android Beam
- emulare card
o dispozitivul NFC se comporta ca un simplu card
o folosit in special pentru plati electronice

Etichete NFC

- NXP MIFARE
o Implementari propria ale standardului ISO14443 A
- Tipuri
o MIFARE Classic
o MIFARE DESFire
o MIFARE Plus
o MIFARE Ultralight

27
Curs 12

Accesul la codul nativ

- Functionalitati cu cerinte de performanta ridicate


o Grafica 3D
o Prelucrarea in timp real: sunete, imagini
o Prelucrare video
o Efectuarea de calcule complexe
- Criterii de alegere
o Cerintele aplicatiei
o Complexitatea si efortul necesar implementarii native in raport cu sporul de
performanta adus
- Support Java
o JNI (Java Native Interface)
- Suport Android
o Android NDK (Native Development Kit)

Java Native Interface (JNI)

- Platforma care permite


o Apelul functiilor native din aplicatiile Java
o Accesarea obiectelor Java din functiile native
- Codul nativ are acces la functionalitatile masinii virtuale Java

JNIEnv

- Interfata nativ – Java


- Pointer la tabela de functii cu functiile JNI disponibile
- Accesul la functii care asigura interoperabilitatea intre Java si codul nativ
- Toate metodele native au acces la aceasta interfata

Metode interfata nativa

- Creare/conversii siruri
- Tartare exceptii
- Creare/copier vectori
- Accesare campuri
- Apelare metode
- Acces la masina virtuala Java
- Sincronizare executie

28
Fisiere in cadrul proiectului

- Fisier sursa Java


o Include metodele implementate in mod nativ
- Fisier antet C/C++
o Include semnaturile metodelor native
o Poate fi generat pe baza fisierului Java care le expune
- Fisier sursa C/C++
o Include implementarea metodelor native

Android NDK

- Componenta a platformei de dezvoltare Android


- Permite implementarea de functionalitati in cod nativ, in limbajele C sau C++

Componenta NDK

- Instrumente de compilare
- Fisiere antet
- Biblioteci
- Exemple
- Scripturi dedicate dezvoltarii de module native

Application Binary Interface (ABI)

- Stabileste modul in care aplicatia interactioneaza cu sistemul la executie


- Similar cu arhitectura setului de instructiuni
- Informatii furnizate
o Setul de instructiuni utilizat
o Formatul fisierelor executabile binare
o Conventii de apel
o Dimensiunile si modalitatea de aliniere a datelor in memorie

Curs 13

Android Wear/Wear OS

- aparut in 2014, cu denumirea Android Wear


- din 2018, Android OS

Tipuri de aplicatii pentru Wear OS

- aplicatii dedicate dispozitivelor portabile


o aplicatii dependente de o aplicatie companion

29
o aplicatii independente (Wear OS 2.0)
- carduri contextuale in fluxul de carduri
o notificari trimise de aplicatiile Android de pe dispozitivul mobil
o notificari contextuale de pe dispozitivul portabil (ceas)

Curs 14

Multimedia

Resurse de tip multimedia

- locale
o incluse in pachetul aplicatiei (resurse si continut)
o sistemul de fisiere
o biblioteci globale media
- disponibile la distanta (server)
o accesibile prin diferite protocoale
 HTTP, HTTPS
 RTSP etc

Operatii

- Redare
o Prezentarea continutului media intr-o forma specifica
- Captare
o Preluarea continutului media si salvarea sau retransmiterea acestuia
- Prelucrare
o Modificarea continutului media sau aplicarea de transformari specific acestuia (rotiri,
translatari, modificare frecvente)

 Imagini
 Audio
 Video

Multimedia Android

- Pachete
o Android.media
o Android.hardware
- Includerea de capabilitati hardware
o Camera, autofocus, flash, front
- Includerea de permisiuni de acces
o Camera
o Microfon

30
o Memoria externa
o Internet

MediaStore

- Furnizor de continut
- Acces global la clipurile media din system
- Clase specializate pe continut:
o MediaStore.Audio
o MediaStore.Video
o MediaStore.Images
- Informatii despre clipuri
o Artist, titlu, dimensiune, locatie, etc

31

S-ar putea să vă placă și