7/31/2019 Introducere Practica
1/21
3
Introducere
1.1Ce este Android?Android este un sistem de operare pentru dispozitivele mobile (tablete si
telefoane), avand la baza un kernel Linux. A fost dezvoltat la inceput de Google iar
apoi de consortiulOpen Handset Alliance.
Android permite programatorilor sa dezvolte aplicatii scrise in limbajul de
programare Java folosind bibliotecile puse la dispozitie de SDK (Android nu asigura
toate bibliotecile de clase complete si API-ul din pachetele Java SE sau ME, deci nu
puteti rula in Android orice cod scris in Java).
SDK-ul Androidinclude un set complet de instrumente de dezvoltare. Acestea includ
un program de depanare, biblioteci, un emulator de dispozitiv, documentatie, etc.
Mediul de dezvoltare (IDE) suportat oficial este Eclipse (3.2 sau mai recent),
utilizand plug-in-ul Android Development Tools (ADT), desi puteti folosi orice
editor de text pentru a edita fisierele XML si Java iar apoi sa utilizati uneltele din
linia de comanda pentru a compila/rula/depana aplicatiile Android.
Puteti descarca ultima versiune de Eclipse de pesite-ul oficialatat pentru Windows
cat si pentru Linux.
De ce este Android att de special?
Personalizabil
Sincronizare
Android market
Multitasking
Nu necesita software de instalare
Tethering
Open Source
http://en.wikipedia.org/wiki/Open_Handset_Alliancehttp://en.wikipedia.org/wiki/Open_Handset_Alliancehttp://en.wikipedia.org/wiki/Open_Handset_Alliancehttp://developer.android.com/sdk/index.htmlhttp://developer.android.com/sdk/index.htmlhttp://www.eclipse.org/downloads/http://www.eclipse.org/downloads/http://www.eclipse.org/downloads/http://www.eclipse.org/downloads/http://developer.android.com/sdk/index.htmlhttp://en.wikipedia.org/wiki/Open_Handset_Alliance7/31/2019 Introducere Practica
2/21
4
1.2 ADT (Android Development Tools)
ADT este un plugin pentru Eclipse care ajuta dezvoltatorii sa creeze aplicatii
Android mai usor. Printre facilitati amintim: crearea mai usoara a UI-urilor,
depanarea aplicatiilor intr-un mediu grafic editarea facila a fisierelor XML.
Instalare ADT
Pentru a instala pluginul va trebui sa urmariti pasii:
In Eclipse, selectatHelp -> Install New Software Selectati butonulAdd In fereastra de dialog Add Repository puteti adauga la Name Plugin ADT, iar la
Location urmatorul link:https://dl-ssl.google.com/android/eclipse/
Dupa ce ati adaugat un nou repository in fereastraAvailableSoftware selectatiDeveloper Tools si instalati componentele
Restartati Eclipse pentru ca pluginul sa fie active.
https://dl-ssl.google.com/android/eclipse/https://dl-ssl.google.com/android/eclipse/https://dl-ssl.google.com/android/eclipse/https://dl-ssl.google.com/android/eclipse/7/31/2019 Introducere Practica
3/21
5
Configurare ADT
Pentru a configura pluginul ADT urmati pasii:
In Eclipse selectati Window -> Preferences Selectati Android din panoul din stanga Aici va trebui se introduceti calea catre SDK-ul Android. Iar la urma
selectatiApply si apoi OK
1.3 Android SDK and AVD Manager
Ultimul lucru pe care trebui sa il faceti inainte de a scrie primul program in
Android este sa instalati componente ale SDK-ului. Puteti sa faceti acest lucru
din Eclipse Window -> Android SDK and AVD Manager.
Aici puteti sa descarcati SDK-urile pentru mai multe platforme, avand astfel
posibilitatea sa testati programele voastre atat pe un emulator ce ruleaza Android 2.2
(Froyo) dar si pe un emulator ce ruleaza Android 2.3 (Gingerbread).
7/31/2019 Introducere Practica
4/21
6
Crearea unui AVD (Android Virtual Device)Pentru a putea sa va testati programele intr-un emulator, va trebui sa creati intaiun AVD, care reprezinta specificatiile pe care le va avea emulatorul.
In Eclipse selectati Windows -> Android SDK and AVD Manageriar aici in tab-ul Virtual devices selectatiNew
Aici puteti sa alegeti platforma AVD-ului sau proprietatile hardware ale emulatoruluicum ar fi suportul GPSsau suportul unui SD Card.
7/31/2019 Introducere Practica
5/21
7
Hello WorldPrimul program in Android
In Eclipse selectati File -> New -> Android Project Completati campurile respective astfel:
Project name: HelloWorld Build Target: Platforma pe care va rula aplicatia (in cazul de mai jos Android 2.3.3) Application name: HelloWorld Package name: org.helloworld Create Activity: HelloWorld
7/31/2019 Introducere Practica
6/21
8
Dupa ce ati apasat pe Finish Eclipse va crea un nou proiect cu structura specifica
Android. Daca va uitati in fisierul:HelloWorld -> src -> org -> helloworld ->HelloWorldActivity.
packageorg.helloworld;
importandroid.app.Activity;
importandroid.os.Bundle;
importandroid.widget.TextView;
publicclass HelloWorldActivity extends Activity {
/** Called when the activity is first created. */
@Override
publicvoid onCreate(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
TextView tv =new TextView(this);
tv.setText("Hello, World");setContentView(tv);
7/31/2019 Introducere Practica
7/21
9
}
}
In acest caz am creat un TextView si am apelat metoda setText pentru a seta
textul Hello, World.
Rularea Aplicatiei Android
Pentru a rula aplicatia va trebui din Eclipse sa selectatiRun -> Run si apoiAndroid
Application. Va trebui sa asteptati sa porneasca emulatorul (poate sa dureze si cateva
minute) si apoi dupa ce aplicatia va fi instalata va trebui sa aveti urmatorul ecran:
Android
Debugging si Depanare
Depanarea este foarte importanta in procesul de realizare a aplicatiilor pentru
dispozitive mobile. Acest proces este insa putin diferit fata de depanarea programelor
clasice pentru calculator, in primul rind pentru ca ruleaza pe alt dispozitiv. Tocmai
din acest motiv, avem nevoie de programe specializate pentru a realiza depanarea. De
asemenea, fiind vorba de dispozitive mobile, apar si anumite evenimente specifice,
7/31/2019 Introducere Practica
8/21
10
cum ar fi apeluri telefonice, descarcarea bateriei etc., evenimente ce trebuie tratate
intr-un fel sau altul.
1.4 AndroidDDMS
Utilitarul pentru depanarea aplicatiilor pentru Android se numeste DDMS (Dalvik
Debug Monitor System). Acesta foloseste de fapt un alt utilitar, numit adb (Android
Debug Bridge), pentru a se conecta la simulatoare sau dispozitive fizice.
Cu ajutorul DDMS putem vizualiza parametrii dispozitivului si al programelor ce
ruleaza pe acesta. DDMSpoate fi accesat ca un program separat (standalone) sau sub
forma unei perspective inEclipse.
DDMSSoftware separat
DDMS se gaseste in directorul tools din SDK sau toos/lib, in functie de versiunea de
SDK.
$SDK/tools/ddms$SDK/tools/lib/ddms.jar
DDMS
Utilizare
7/31/2019 Introducere Practica
9/21
11
Cele mai importrante functii pe care DDMS le poate indeplini sunt:
Afisarea log-urilor dispozitivelor Afisarea informatiilor despre procesele curente Controlul simulatoarelor
AndroidLoguri
Logurile sistemului sunt cele mai importante informatii pe care le poate oferiDDMS.
Aici sunt descrise toate actiunile indeplinite de catre dispozitiv, exceptiile aparute cum si
informatii necesare depanarii. Daca folositi programul separat, log-urile vor aparea in
panoul denumitLog, iar daca folositi perspectiva dinEclipse panoul se numeste LogCat (a
nu se confunda cu Console!acestea sunt mesajele afisate de catre Eclipse).
Fiecare mesaj din aceasta lista este insotit de urmatoarele date (fiecare pe cate o
coloana):
Time - data si ora la care a fost scris mesajul Tipul mesajului
1. IInformationmesaj informativ2. DDebugmesaj utile la depanare3. W Warningmesaj de avertizare (exceptiile ce nu sunt foarte importante si nu
au un imact important asupra componentei apar sub forma de astfel de mesaje)
4. E Errormesaj de eroare (exceptiile ce intrerup o componenta apar sub formade astfel de mesaje)
5. V Verboseinformatii suplimentare afisate de programe (in general la cerere, sefolosesc la depistarea problemelor de functionare rezultate in general din cauza
configurarii gresite a programelor)
PID - ID-ul procesului ce a generat mesajul Tag - Eticheta sau categoria mesajului (este util pentru filtre) Message - mesajul propriu-zis (text)
7/31/2019 Introducere Practica
10/21
12
Este de remarcat ca fiecare mesaj reprezinta cate o linie de text. Spre exemplu,
exceptiile sunt in general afisate pe mai multe linii, acestea continand foarte multa
informatie. Astfel, fiecare exceptie este reprezentata de mai multe mesaje de log.
SDK-ul ne pune la dispozitie doua metode:
functiile statice ale clasei Log System.out.println mesajele catre consola stndard (stdout)
Exemplu pentru clasa Log:
Log.println(Log.DEBUG, "exemplu log", "aceasta este un mesaj de log cu eticheta
'exemplu log'");
Exemplu pentru utilizarea System.out.println. De remarcat este ca mesajele de log
trimise sub aceasta forma vor avea eticheta System.out si vor fi de
tipulInformation.
System.out.println("aceasta este un mesaj catre consola standard");
O alta functie importanta ce trebuie discutata este posibilitatea de filtrare a mesajelor
de log. Deoarece LogCat agrega toate mesajele de log din sistem, urmarirea unor
anumite mesaje poate fi dificila.
Un filtru se creaza prin apasarea butonuluiplus verde din bara panoului Log
(respectiv LogCat in Eclipse).
7/31/2019 Introducere Practica
11/21
7/31/2019 Introducere Practica
12/21
14
butonulLoad View Hierarchy. Daca nu s-a ales nici o componenta, programul va
afisa componenta ce este in capatul Task-ului curent.
Afisarea ierarhiei de View-uri se face sub forma unui arbore avand alaturate fie
propietatiile, fie imaginea fiecarui View. Selectarea intre cele doua moduri se face
folosind butoanele de la baza ferestrei programului.
7/31/2019 Introducere Practica
13/21
15
User Interface
Android permite 2 metode de creare a UI-ului:
programaticelemetele grafice sunt create/manipulate la rularea aplicatiei.
declararea elementelelor grafice in fisiere XMLMai jos este un exemplu care creaza UI-ul programatic:
packageorg.exemplu;
importjava.util.Date;
importandroid.app.Activity;importandroid.os.Bundle;importandroid.widget.Button;importandroid.view.View;
publicclass ExempluActivity extends Activity implementsView.OnClickListener{Button mButton;
/** Called when the activity is first created. */@Override
publicvoidonCreate(Bundle savedInstanceState){super.onCreate(savedInstanceState);
mButton =newButton(this);mButton.setOnClickListener(this);updateTime();setContentView(mButton);
}publicvoidonClick(View view){
updateTime();}
privatevoidupdateTime(){mButton.setText(newDate().toString());
}
7/31/2019 Introducere Practica
14/21
16
Explicatia programului este simpla, clasa ExempluActivity extinde Activity si
implementeaza interfata OnClickListenerpentru a putea raspunde la evenimente de
tipul touch din partea utilizatorului. Apoi se declara un obiect de tip Button, pentru
ca nu se defineste nici o marime, butonul va ocupa intreg ecranul. La fiecare apasare
a butonului, textului acestuia va fi ora din momentul respectiv.
1.5 Declararea elementelelor grafice in fisiere XML
Este incurajata folosirea fisierelor XML, deoarece in acest mod este separata
interfata grafica de logica programului. Deasemenea utilizand pluginul ADT pentru
Eclipse este foarte usor si rapid de creat interfata grafica a programului.
Fisierele XML se afla in directorul res/layoutal fiecarui proiect Android.
Dupa ce creati un nou proiectAndroid, veti observa ca este creat in acelasi timp si
fisierul res/layout/main.xml care are urmatoarea structura:
O explicatie succinta al acestuia ar fi: LinearLayout reprezinta un container
pentru alte elemente, in cazul de fata un TextView. Fiecare tag poate avea diferite
atribute, cum ar fi inaltimea, latimea, sau in cazul TextView textul care va fi afisat.
Putem modifica programul anterior astfel incat butonul sa fie declarat in fisierul
XML, iar in fisierul Java sa ramana doar logica programului.
Fisierul main.xml
7/31/2019 Introducere Practica
15/21
17
android:text=""android:layout_width="fill_parent"android:layout_height="fill_parent"/>
Fisierul ExempluActivity.java
packageorg.exemplu;
importjava.util.Date;
importandroid.app.Activity;importandroid.os.Bundle;importandroid.widget.Button;importandroid.view.View;
publicclass ExempluActivity extends Activity implementsView.OnClickListener{Button mButton;
/** Called when the activity is first created. */@Override
publicvoidonCreate(Bundle savedInstanceState){super.onCreate(savedInstanceState);setContentView(R.layout.main);
mButton =(Button)findViewById(R.id.button);mButton.setOnClickListener(this);updateTime();
}publicvoidonClick(View view){
updateTime();}
privatevoidupdateTime(){mButton.setText(newDate().toString());
}}
Explicatii: In fisierul main.xml am declarat un buton cu id-ul @+id/button, acest
lucru este foarte important, pentru ca asa vom putea indentifica butonul in
fisierulJava:(Button)findViewById(R.id.button), iar fisierul XML este legat de
clasa Java prin liniasetContentView(R.layout.main). Restul programului este
asemanator.
Exemplu afisarea unei casute de dialog
// creem fereastra de dialog si atasam butoanele si functiile acestoraAlertDialog.Builder builder =new AlertDialog.Builder(this);builder.setMessage("Are you sure you want to exit?")
.setCancelable(false)
.setPositiveButton("Yes", new DialogInterface.OnClickListener(){publicvoidonClick(DialogInterface dialog, int id){
Evenimente.this.finish();}
}).setNegativeButton("No", new DialogInterface.OnClickListener(){
publicvoidonClick(DialogInterface dialog, int id){dialog.cancel();
}});
AlertDialog alert = builder.create();// afisam casuta de dialogalert.show();
7/31/2019 Introducere Practica
16/21
18
Liste
Sub platforma Android, acestea sunt implementate folosind modelul MVC (Model
View Controller).Modelul este reprezentat de datele ce trebuie afisate, View-ul este
lista propriu-zisa si Controller-ul este programul care controleaza modul de afisare.
ListActivityUn View de tipListView poate fi plasat pe orice tip de activitate (Activity). In mod
normal, descriem ListView-ul in fisierul XML atasat activitatii, ii dam un id si incodul java luam un pointer catre el.
Exista insa un mod mai simplu. In general, pe o activitate exista o singura lista, astfelca Android ne pune la dispozitie un tip special de activitate, numit ListActivity, carerezolva automat preluarea pointer-ului listei. In xml, trebuie declarat obligatoriuunListView cu id-ul @android:id/list.
De asemenea,ListActivity pune la dispozitie urmatoarele functii:
// seteaza adaptorul pentru lista de pe ferastravoidsetListAdapter (ListAdapater adapter);
// intoarce adaptorul listei de pe fereastraListAdapter getListAdapter ();
// intoarce un pointer catre lista din fereastraListView getListView ();
O alta functie oferita de catre ListActivity este onListItemClick(). Acesta este
apelata automat de fiecare data cand se executa un click asupra unui element din lista.
7/31/2019 Introducere Practica
17/21
19
Initial functia este vida, nu face nimic. Pentru a-i adauga o actiune, programatorul
trebuie sa suprascrie aceasta functie.
@OverridepublicvoidonListItemClick (ListView list, View v, int position, long id){
// list - este lista de pe fereastra// v - este elementul din lista pe care s-a dat click// position - este pozitia pe care s-a dat click (de fapt pozitia la care se afla elementul
v in lista)// id - este id-ul elementului (obtinut prin functia getItemId () a adaptorului
}
AndroidArrayAdapter
Pentru lista simple, ce contin element cu o singura linie de text se poate folosi o
clasa mult simplificata, si anume ArrayAdapter. Acesta presupune ca toate
elementele sunt stocate intr-un sir (ex: Object[]) sau o lista (orice obiect ce
implementeaza interfataList).
Deoarece fiecare element din lista este o linie de text si in sir sau lista noi pastram
obiecte, adaptorul va apela functia toString() pe fiecare obiect.
Un exemplu de folosire este urmatorul:
class Personaj{
publicString nume;publicString desen;
@OverridepublicString toString (){
// acesta functie este apelata de catre ArrayAdapter pentru a transforma obiectul intr-un
String ce// sa fie afisat in listareturn nume+" din desenul animat "+desen;
}}
publicclass ListaDeseneAnimate extends ListActivity{
ArrayList personaje;ArrayAdapter adapter;
@OverridepublicvoidonCreate (Bundle savedInstanceBundle){
super.onCreate(savedInstanceBundle);personaje =new ArrayList();adapter =new ArrayAdapter(this, android.R.layout.simple_list_item_1, personaje);setContentView (R.layout.main);setListAdapter (adapter);
// adaugam cateva personaje in listaadaugaFunnyGuy("Bugs Bunny", "Looney Toons");adaugaFunnyGuy("Fred Flinstone", "The Flinstones");adaugaFunnyGuy("Betty Rubble", "The Flinstones");
}
7/31/2019 Introducere Practica
18/21
20
@OverridepublicvoidonListItemClick (ListView list, View v, int position, long id){
// afisam numele personajului pe care s-a dat click folosind un ToastToast.makeText(ListaDeseneAnimate.this, personaje.get(position).nume,
Toast.LENGTH_LONG).show();}
privatevoidadaugaFunnyGuy (String nume, String desen){
Personaj p =new Personaj ();p.nume= nume;p.desen= desen;personaje.add(p);// acesta functie deterimina adaptorul sa ceara listei sa reafiseze continutuladapter.notifyDataSetChanged();
}}
In imaginea de mai jos este prezentat modul in care va arata o lista construita
cu ArrayAdapter
1.6 Servicii Android
Un Serviciu este o componenta a sistemului de operareAndroid. Caracteristica
principala ale acestuia este posibilitatea de a executa operatii lungi in background
fara a fi nevoie de o interfata grafica. Un exemplu clasic este player-ul pentru muzica:
puteti deschide un player-ul sa ascultati muzica, iar apoi puteti sa va verificati email-
ul sau sa folositi Browser-ul fara ca muzica sa se opreasca.
7/31/2019 Introducere Practica
19/21
21
Un serviciu are un ciclu de viata asemanator cu cel al uneiActivitati: serviciul este
creat cu functia onCreate () si va rula intre apelurile functiilor onStart(Intent intent,
int startid) si onDestroy()
De asemenea ca orice Activitate un Serviciu va trebui declarat in fisierul Manifest:
...
...
Androidexemplu complet cu servicii
ServicesDemo.java
importandroid.app.Activity;importandroid.content.Intent;importandroid.os.Bundle;importandroid.util.Log;importandroid.view.View;importandroid.view.View.OnClickListener ;importandroid.widget.Button;
publicclass ServicesDemo extends Activity implements OnClickListener {privatestaticfinalString TAG ="ServicesDemo";Button buttonStart, buttonStop;
@OverridepublicvoidonCreate(Bundle savedInstanceState){
super.onCreate(savedInstanceState);setContentView(R.layout.main);
7/31/2019 Introducere Practica
20/21
22
buttonStart =(Button) findViewById(R.id.buttonStart);buttonStop =(Button) findViewById(R.id.buttonStop);
buttonStart.setOnClickListener(this);buttonStop.setOnClickListener(this);
}
publicvoidonClick(View src){switch(src.getId()){case R.id.buttonStart:Log.d(TAG, "onClick: starting srvice");startService(new Intent(this, MyService.class));
break;case R.id.buttonStop:Log.d(TAG, "onClick: stopping srvice");stopService(new Intent(this, MyService.class));
break;}
}}
MyService.java
importandroid.app.Service;importandroid.content.Intent;
importandroid.media.MediaPlayer;importandroid.os.IBinder;importandroid.util.Log;importandroid.widget.Toast;
publicclass MyService extends Service {privatestaticfinalString TAG ="MyService";MediaPlayer player;
@Overridepublic IBinder onBind(Intent intent){
returnnull;}
@OverridepublicvoidonCreate(){
Toast.makeText(this, "My Service Created", Toast.LENGTH_LONG).show();
Log.d(TAG, "onCreate");
player = MediaPlayer.create(this, R.raw.melodia_mea);player.setLooping(false);// Set looping
}
@OverridepublicvoidonDestroy(){
Toast.makeText(this, "My Service Stopped", Toast.LENGTH_LONG).show();Log.d(TAG, "onDestroy");player.stop();
}
@OverridepublicvoidonStart(Intent intent, int startid){
Toast.makeText(this, "My Service Started", Toast.LENGTH_LONG).show();
Log.d(TAG, "onStart");player.start();
}}
main.xml
7/31/2019 Introducere Practica
21/21
23
Bibliografie
1. https://developers.google.com/maps/documentation/android/hello-mapview2. http://itassistant.org/tag/android3. http://ro.wikipedia.org/wiki/Android_(sistem_de_operare)4. http://www.android.com/5. http://www.openhandsetalliance.com/android_overview.html
https://developers.google.com/maps/documentation/android/hello-mapviewhttps://developers.google.com/maps/documentation/android/hello-mapviewhttp://itassistant.org/tag/androidhttp://itassistant.org/tag/androidhttp://ro.wikipedia.org/wiki/Android_(sistem_de_operare)http://ro.wikipedia.org/wiki/Android_(sistem_de_operare)http://www.android.com/http://www.android.com/http://www.openhandsetalliance.com/android_overview.htmlhttp://www.openhandsetalliance.com/android_overview.htmlhttp://www.openhandsetalliance.com/android_overview.htmlhttp://www.android.com/http://ro.wikipedia.org/wiki/Android_(sistem_de_operare)http://itassistant.org/tag/androidhttps://developers.google.com/maps/documentation/android/hello-mapviewTop Related