Documente Academic
Documente Profesional
Documente Cultură
Suport de Curs 3
Modul de lucru in MIT App Inventor
App Inventor a fost conceput pentru a dezvolta aplicaţii pentru telefoanele cu Android, folosind un
browser web şi un telefon conectat la Internet sau emulatorul (Fig. 1.42). Serverele App Inventor sto-
chează aplicațiile dezvoltate şi oferă, de asemenea, o formă a versiunii de management, prin urmărirea
modificării (change tracking). Practic, aceasta înseamnă că mediul de programare face uz de metoda
numită cloud computing - utilizatorul/programatorul folosește computerul său doar să se conecteze la
Internet şi la server şi utilizează serverul cu resursele lui partajate — spaţiu de stocare sau chiar puterea
de procesare.
• în App Inventor Designer, sunt selectate componentele care vor alcătui aplicația
• în App Inventor Blocks Editor, blocurile din program sunt asamblate pentru a specifica modul în
care componentele trebuie să se comporte. Se pot asambla programele vizual, montând piesele
împreună, ca piesele unui puzzle.
care ulterior se poate instala. Dacă nu este disponibil un telefon cu Android, aplicațiile pot fi rulate cu
ajutorul emulatorului Android, un software care rulează pe calculator şi se comportă exact ca pe telefon.
Mediul de dezvoltare App Inventor poate rula pe Mac OS X, GNU/Linux, sistemele de operare Windows,
şi pe modele de telefon deja populate cu Android. Aplicațiile create cu App Inventor pot fi instalate pe
orice telefon Android. Înainte ca App Inventor să fie folosit, este necesară instalarea pachetului App
Inventor pentru computer.
Pentru a putea lucra cu App Inventor, sunt absolut necesare o conexiune la Internet și un cont Gmail. Cu
un browser web se navighează la pagina http://beta.appinventor.mit.edu/, unde se cere logarea cu con-
tul Gmail. Ceea ce se deschide este App Inventor Designer (Fig. 1.43 App Inventor Designer), unde se
creează proiectele și se adaugă componentele viitoarei aplicații. Pentru a stabili comportamentul aplica-
ției, este necesară pornirea editorului de blocuri (Blocks Editor), care se va deschide conform cu (Fig.
1.44), dacă este instalată, în prealabil, Java.
În partea stângă a ferestrei editorului există trei categorii de seturi de blocuri (pallete): Built-in, My
Blocks (unde vor apărea blocurile adăugate în Designer) și Advanced. Când se acționează un set,
printr-un clic de maus, vor fi vizibile blocurile stocate în acea zonă. Categoria Built-in conține setul stan-
dard de blocuri necesare pentru orice aplicație (text, liste etc.). Categoria Advanced conține blocuri pen-
tru realizarea unor aplicații mai avansate, cu o logică mai complexă.
Designer-ul rulează în browser, iar editorul rulează folosind Java. Cu toate acestea, ele sunt conectate
astfel încât chiar dacă se închide fereastra editorului, toate informațiile din acesta sunt salvate în Desig-
ner. Când se face click pe butonul Open the Blocks Editor, un nou fișier .jnlp este descărcat pe calculator
și acesta va fi deschis. În acest fel, editorul de blocuri va conține toate blocurile care fuseseră deja pro-
gramate în pași anteriori.
Programatorul are posibilitatea să utilizeze un telefon sau tabletă cu Android sau un emulator. Dacă se
selectează emulator (Fig. 1.45), atunci încărcarea va dura câteva minute, timp în care nu se va întreprin-
de nicio acțiune. După pornirea emulatorului, acesta trebuie conectat la editor, prin selectarea lui din
lista disponibilă în colțul din dreapta sus. Mai departe, editorul va începe comunicarea cu emulatorul și
aplicația ar trebui să apară pe emulator. Se poate folosi mausul pentru a acționa butoanele de pe emula-
tor, dar dacă butonul nu a fost programat, atunci nimic nu se va întâmpla. Mergând mai departe, orice
modificări aduse aplicației în Designer şi în editorul de blocuri, acestea vor apărea pe emulator.
Componente de bază
Button — componentă pe care utilizatorul o apasă pentru a realiza o acțiune asociată. Butoanele detec-
tează când sunt apăsate și își pot modifica aspectul.
Proprietăți:
Evenimente:
CheckBox — componentă care detectează acționarea de către utilizator și își modifică starea booleană.
Proprietăți:
Evenimente:
Proprietăți:
ListPicker — componentă folosită pentru ca utilizatorul să poată selecta un element dintr-o listă care
apare la acționarea componentei. Elementele listei pot fi specificate în proprietatea ElementsFromString
sub forma (selecție1, selectie2, selectie3), sau dintr-o listă externă prin setarea proprietății Elements la o
listă List în editorul de blocuri.
Proprietăți:
Evenimente:
Screen — nu apare în paletă ca alte componente, dar apare automat odată cu proiectul. Fiecare proiect
pornește cu un ecran, numit Screen1. Acest nume nu poate fi schimbat. Ulterior se pot adăuga și alte
ecrane.
Proprietăți
• AlignHorizontal: un număr care codifică alinierea pe orizontală a conținutului ecranului. Valorile
pot fi 1= aliniere la stânga, 2=centrare, 3=aliniere la dreapta.
• AlignVertical: un număr care codifică alinierea pe verticală a conținutului ecranului. Valorile pot
fi 1= aliniere sus, 2=centrare, 3=aliniere jos.
• BackgroundColor: culoarea de fundal pentru ecran.
• BackgroundImage: o imagine care se încarcă pe fundalul a ecranului.
• Height: înălţimea ecranului (dimensiunea y).
• Icon: o imagine care poate fi utilizată ca pictogramă pentru aplicația instalată pe telefon. Aceas-
ta ar trebui să fie PNG sau JPG; 48x48 este o dimensiune bună. În cazul folosirii altor imagini de-
cât PNG sau JPG, de exemplu fişiere ICO, App Inventor nu va putea să împacheteze aplicația.
• ScreenOrientation: orientarea ecranului. Valorile posibile sunt: unspecified, landscape, portrait,
sensor, user.
• Scrollable: opțiunea este specificată printr-un checkbox în designer. Când este selectat, va exista
o bară de derulare verticală pe ecran şi înălţimea aplicației poate depăşi înălţimea fizică a dispo-
zitivului. Când nu este bifat, înălţimea aplicației va fi constrânsă la înălţimea dispozitivului.
• Title: titlu pentru ecran (text). Aceasta va apărea în partea stângă sus a telefonului atunci când
aplicaţia rulează. O alegere normală pentru titlu este chiar titlul aplicației, dar ar putea fi altceva,
sau poate fi chiar schimbat în timp ce aplicație se execută.
• Width: lăţimea ecranului (dimensiunea x).
Evenimente:
Metode:
TextBox — componentă pentru introducerea de text. Se poate stabili o valoare inițială (în proprietatea
Text), sau se poate oferi o sugestie de completare (în proprietatea Hint). Textul introdus poate avea una
sau mai multe rânduri (proprietatea MultiLine). Dacă este permisă o singură linie de text, la completarea
ei, tastatura se va închide automat la semnalizarea utilizatorului (apăsarea tastei Done). De regulă, case-
tele de text sunt folosite în combinație cu butoane, astfel încât utilizatorul să acționeze un buton când a
finalizat introducerea textului.
Proprietăți:
Evenimente:
Metode:
• HideKeyboard(): ascunde tastatura. Este necesară pentru mai multe linii. La o singură linie se
apasă tasta Done.
TinyDB se face pentru a stoca datele care vor fi disponibile de fiecare dată când aplicaţia se execută.
TinyDB este o componentă non-vizibilă (adică utilizatorul nu o vede pe ecranul aplicației).
Aplicațiile create cu App Inventor sunt iniţializate de fiecare dată când rulează. Dacă o aplicaţie stabileş-
te valoarea unei variabile şi utilizatorul închide apoi aplicația, valoarea acelei variabile nu va fi memorată
data viitoare când aplicația rulează. TinyDB este un stocator de date persistent pentru aplicație, adică
datele stocate vor fi disponibile de fiecare dată când aplicaţia se execută. Un exemplu ar putea fi un joc
care a salvat scorul cel mai mare, şi refăcut de fiecare dată când jocul este jucat.
Instanțele de date sunt stocate în tag-uri. Ulterior, se poate prelua un element care a fost stocat într-un
anumit tag. Dacă nu există nici o valoare depozitată sub într-un tag, atunci valoarea returnată este textul
gol. Prin urmare, pentru a vedea dacă o etichetă are o valoare stocată sub ea, se testează dacă valoarea
returnată este egală cu text gol (de exemplu, o casetă text cu nici un text completat).
Există doar o singură stocare de date pentru o aplicație. Dacă e nevoie de mai multe componente
TinyDB, ele vor folosi aceleaşi date. De asemenea, fiecare aplicație are propriul loc de stocare. Nu se
poate utiliza TinyDB pentru a muta date între două aplicaţii diferite de pe telefon. Pentru a şterge din
baza de date a unei aplicaţii, de pe telefon din meniul Settings→Applications→ Manage applications, se
alege aplicaţia şi se apasă Clear data.
Datele din TinyDB sunt persistente numai după împachetarea şi descărcarea aplicației. Dacă aplicația
este în curs de dezvoltare și telefonul este conectat la PC şi se repornește aplicaţia App Inventor, sau
dacă se deconectează şi apoi reconectează telefonul, baza de date va reîncepe în stare proaspătă
(refresh). Acesta este cazul în care aplicația nu este doar oprită şi repornită, ci este ștearsă din telefon şi
apoi reîncărcată.
Proprietăți: nu are
Evenimente: nu are
Metode:
• StoreValue(text tag, valueToStore): salvează valoarea în tag, care trebuie să fie un text. Valoarea
poate fi un text sau o listă.
• GetValue(text tag): citește valoare salvată în tag. Dacă nu e nimic, returnează textul vid.
• XAccel: pozitiv când dispozitivul este înclinat spre dreapta (adică partea stângă este ridicată) și
negativ când este înclinat spre stânga.
• YAccel: pozitiv când partea de jos este ridicată și negativ când partea de sus este ridicată.
• ZAccel: pozitiv când ecranul este orientat în sus și negativ când ecranul este orientat în jos.
Proprietăți
Evenimente:
Metode:
Nu are.
LocationSensor — Această componentă oferă locaţia dispozitivului Android, folosind GPS-ul dacă este
disponibil şi o metodă alternativă altfel, cum ar fi turnuri celulare sau reţele fără fir cunoscute.
LocationSensor este o componentă non-vizibilă care furnizează informaţii de locație, inclusiv longitudine,
latitudine, altitudine (dacă este acceptată de aparat) şi adresa. Această componentă poate oferi, de
asemenea, geocodare, de conversie a unei adrese date (nu neapărat pe cea curentă) la o latitudine şi o
longitudine. Pentru a funcţiona, componenta trebuie să aibă proprietatea Enabled setată pe true, iar
dispozitivul să aibă activată funcția de detectare a locației.
Proprietăți:
Evenimente:
• LocationChanged (number latitude, number longitude, number altitude): apelat atunci când dis-
pozitivul Android găsește o locaţie nouă.
• StatusChanged(text provider, text status): apelat atunci când starea furnizorului de servicii se
modifică.
Metode:
Proprietăți:
Evenimente
• OrientationChanged(number yaw, number pitch, number roll): numit atunci când orientarea s-a
schimbat.
Blocuri de definire
procedure (procedureWithResult) — grupează o secvență de blocuri care, ulterior, poate fi utilizată în
mod repetat, ca apel de procedură. La crearea unei proceduri, App Inventor creează în mod automat un
bloc de apel (call) care va fi plasat în zona My Definitions. Acest bloc de apel poate fi folosit pentru a
invoca procedura. La crearea unui nou bloc de acest tip, App Inventor alege un nume care poate fi, ulte-
rior, modificat. Acest nume, la nivel de aplicație, trebuie să fie unic. Fig. 1.46 prezintă modul de afișare al
acestor blocuri.
a)
b)
Fig. 1.46 Blocuri de proceduri, fără a) și cu b) returnare de rezultat
name — creează un argument cu nume care poate fi utilizat la apelul unei proceduri. Argumentul pro-
cedurii se specifică prin plasarea unui astfel de bloc la intrarea arg a procedurii. Numărul de argumente
nu este limitat, la completarea unuia apărând, de fiecare dată, un port nou. La specificarea unui argu-
ment, App Inventor va asocia acest argument cu blocul call generat pentru procedură: sloturile pentru
argumente ale blocului de apel vor vizualiza numele argumentelor. Pentru fiecare bloc name definit, App
Inventor creează un bloc value asociat și îl plasează în zona My Definitions. Aceste blocuri vor fi folosite
pentru referirea la valori la apelul procedurilor.
variable — creează o valoare care poate fi modificată pe parcursul rulării aplicației și dă un nume pentru
această valoare. Variabilele sunt globale și pot fi folosite oriunde în aceeași aplicație. Numele variabilei
trebuie să fie unic. Fig. 1.47 prezintă modul de afișare a blocurilor name și variable.
b)
Fig. 1.47 Bloc de tip nume a) și bloc de tip variabilă b)
Handler de evenimente
Programele App Inventor descriu cum ar trebui se comporte telefonul în anumite circumstanțe: un bu-
ton a fost apăsat, telefonul a fost scuturat etc. Aceste acțiuni specifice sunt descrise de un handler de
evenimente care începe cu cuvântul when. Majoritatea handler-elor au culoare verde.
Anumite comenzi au nevoie de una sau mai multe valori de intrare (cunoscute și sub numele de parame-
trii sau argumente) pentru a-și putea realiza acțiunea. Spre exemplu (Fig. 1.49), Sound1.Vibrate are ne-
voie de un timp de vibrare, în milisecunde. Nevoia unui parametrul este marcată de socket-ul din partea
dreaptă a comenzii.
Socket-ul poate primi valori și de la o expresie, adică blocuri cu valori. Blocurile de expresii au un capăt
de prindere în partea stângă, prin care își transmit valoarea socket-ului. Pot fi construite expresii foarte
complexe folosind expresii mai simple, prin compunere orizontală (Fig. 1.50).
Forma comenzilor este astfel realizată, încât ele se pot compune pe verticală într-o stivă de comenzi. De
fapt, aceasta este o comandă complexă compusă din comenzi mai simple.
Comentarii
O parte importantă din munca de programare o constituie realizarea unei documentații. App Inventor
permite încorporarea de comentarii chiar în cod care explică diverse elemente și aspecte ale codului.
Adăugarea unui comentariu pentru blocuri se face cu clic dreapta pe bloc (Fig. 1.53).