introducere practica

Upload: simion-jardan

Post on 04-Apr-2018

284 views

Category:

Documents


0 download

TRANSCRIPT

  • 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_Alliance
  • 7/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-mapview