upb - facultatea etti -...
Post on 03-Oct-2019
39 Views
Preview:
TRANSCRIPT
Programarea pe platforma Android
(PPA)
2015 - 2016
UPB - Facultatea ETTI
Titular curs: Eduard-Cristian Popovici
Suport curs: http://saim.pub.ro/ppa
UPB - ETTI - Curs PPA 28.02.2016 1
UPB - ETTI - Curs PPA 28.02.2016 2
0. Resurse online
0. Resurse online
UPB - ETTI - Curs PPA 28.02.2016 3
Resurse online:
Android Tutorial – Vogella
http://www.vogella.com/tutorials/Android/article.html
Programming Mobile Applications for Android Handheld – Coursera
https://www.coursera.org/course/android (de parcurs acasa pe perioada cursului)
https://class.coursera.org/android-001/lecture (de parcurs la curs ca exemplu)
Pattern-Oriented Software Architectures: Programming Mobile Services for
Android Handheld Systems – Coursera https://www.coursera.org/course/posa (se recomanda a fi parcurs ulterior)
https://class.coursera.org/posa-002/lecture
Android Application Development – Heavendrops.net
http://heavendrops.net/category/android-application-development/161
How To Learn Android 4.4 KitKat App Development Online
http://www.diygenius.com/how-to-learn-android-app-development-online/
0. Resurse online
UPB - ETTI - Curs PPA 28.02.2016 4
Resurse online:
Training for Android developers
http://developer.android.com/training/index.html
Building Your First App (lucrarea 1 de laborator)
http://developer.android.com/training/basics/firstapp/index.html
Alte tutoriale Training for Android developers
http://developer.android.com/training/basics/supporting-devices/index.html
http://developer.android.com/training/basics/activity-lifecycle/index.html
http://developer.android.com/training/basics/fragments/index.html
http://developer.android.com/training/basics/intents/index.html
http://developer.android.com/training/permissions/index.html
http://developer.android.com/training/building-content-sharing.html
http://developer.android.com/training/building-multimedia.html
http://developer.android.com/training/building-graphics.html
http://developer.android.com/training/building-connectivity.html
http://developer.android.com/training/building-location.html
0. Resurse online
UPB - ETTI - Curs PPA 28.02.2016 5
Android Tutorial – Vogella http://www.vogella.com/tutorials/Android/article.html
0. Resurse online
UPB - ETTI - Curs PPA 28.02.2016 6
Programming Mobile Applications for Android – Coursera
https://www.coursera.org/course/android
https://class.coursera.org/android-001/lecture
Introduction to the Android Platform (18:19)
The Android Development Environment - Part 1 (18:06)
The Android Development Environment - Part 2 (12:26)
Application Fundamentals - Part 1 (15:24)
Application Fundamentals - Part 2 (11:24)
The Activity Class - Part 1 (14:06)
The Activity Class - Part 2 (14:50)
The Intent Class - Part 1 (9:14)
The Intent Class - Part 2 (10:42)
0. Resurse online
UPB - ETTI - Curs PPA 28.02.2016 7
Tutoriale coreservlets
Android Programming Basics
Local: Android-Programming-Basics.pdf
http://courses.coreservlets.com/Course-Materials/pdf/android/Android-Programming-Basics.pdf
http://www.slideshare.net/martyhall/android-tutorial-android-programming-basics-xml-java-and-hybrid-approaches-to-layout
Widget Event Handling
Local: Android-Widget-Event-Handling.pdf
http://courses.coreservlets.com/Course-Materials/pdf/android/Android-Widget-Event-Handling.pdf
https://www.slideshare.net/martyhall/android-tutorial-approaches-to-widget-event-handling
Alte tutoriale http://www.coreservlets.com/android-tutorial/
Local: Android-Widgets-Buttons.pdf
Local: Android-Layouts.pdf
Local: Android-Intents-1.pdf
Local: Android-Intents-2.pdf
0. Resurse online
UPB - ETTI - Curs PPA 28.02.2016 8
TouchCalculator
MockUp
Bare Bones User
Interface
Displaying
The Keypad
Applying Style
To Our Keypad
Tutoriale Calculator
Android: Introduction to a simple calculator – Cloud 101
http://cloud101.eu/blog/2012/03/10/android-introduction-to-a-simple-calculator/
Introduction to Android development: TouchCalculator
http://www.codeproject.com/Articles/104931/Introduction-to-Android-development-
TouchCalculato
0. Resurse online
UPB - ETTI - Curs PPA 28.02.2016 9
Introducere in Java si Orientarea spre Obiecte
Local: 2014_Intro_Java_OOP_short_v01.pdf
http://www.opus-college.net/devcorner/HeadFirstJava2ndEdition.pdf
http://www.sebizfinishingschool.com/ebook/java/Head-First-Java-2nd-edition.pdf
Local: Head-First-Java-2nd-edition.pdf
UPB - ETTI - Curs PPA 28.02.2016 10
1. Arhitectura platformei Android
1. Arhitectura platformei Android
o platforma deschisa
o pentru dezvoltare software pentru terminale mobile
o gandita ca o stiva software completa care include
o un sistem de operare deschis
o biblioteci (native)
o un middleware (Android Runtime – partial nativ, partial scris in Java)
o un framework de aplicatii (scris in Java)
o si aplicatii (scris in Java)
UPB - ETTI - Curs PPA 28.02.2016 11
Android
1. Arhitectura platformei Android
o platforma deschisa
o pentru dezvoltare software pentru terminale mobile
o gandita ca o stiva software completa care include
o un sistem de operare deschis
o biblioteci (native)
o un middleware (Android Runtime – partial nativ, partial scris in Java)
o un framework de aplicatii (scris in Java)
o si aplicatii (scris in Java)
UPB - ETTI - Curs PPA 28.02.2016 12
Android
1. Arhitectura platformei Android
UPB - ETTI - Curs PPA 28.02.2016 13
Arhitectura platformei Android
1. Arhitectura platformei Android
UPB - ETTI - Curs PPA 28.02.2016 14
Arhitectura platformei Android
Pornind de jos in sus arhitectura e bazata pe nucleul sistemului de operare Linux 2.6
– ca nivel de abstractizare al hardware-ului
– care ofera servicii sistem cum sunt
– securitatea
– managementul memoriei
– managementul proceselor
– o stiva de retea
– un model de drivere (care acopera majoritatea dispozitivelor)
1. Arhitectura platformei Android
UPB - ETTI - Curs PPA 28.02.2016 15
Arhitectura platformei Android
Urmatorul nivel este format din bibliotecile native scrise in C/C++
– capabilitati utilizate de diversele componente ale sistemului Android
– expuse dezvoltatorilor prin intermediul framework-ului Android
– libc – biblioteca sistem C adaptata pentru dispozitive bazate pe Linux
– Media Libraries – suport pentru inregistrare/redare audio/video/imagini
– Surface Manager – gestioneaza accesul la subsistemul de afisare si
compunerea nivelurilor grafice 2D si 3D ale aplicatiilor
1. Arhitectura platformei Android
UPB - ETTI - Curs PPA 28.02.2016 16
Arhitectura platformei Android
– LibWebCore – un motor pentru browser Web modern care sta la baza
browserului Android si a embeddable web view
– SGL – motorul grafic suport 2D
– OpenGL ES – motorul grafic suport 3D – utilizeaza fie accelerarea 3D
hardware (daca e valabila) fie un software inclus, puternic optimizat 3D
– FreeType – motorul pentru afisarea bitmap si vector a fonturilor
– SQLite – un motor puternic si simplu pentru baze de date relationale
disponibil tuturor aplicatiilor
1. Arhitectura platformei Android
UPB - ETTI - Curs PPA 28.02.2016 17
Arhitectura platformei Android
Urmatorul nivel este platforma de executie Android Runtime
– principala componenta a ei fiind masina virtuala (VM) Dalvik
– care executa coduri de octeti (bytecodes) numite .dex
– obtinute prin conversie din fisiere sursa Java .class si .jar
– eficientizate pentru procesoare mici si lente si memorie redusa
– permite executia in procese separate, fiecare in propria instanta a VM
– care este eficientizata pentru executia mai multor VM
1. Arhitectura platformei Android
UPB - ETTI - Curs PPA 28.02.2016 18
Arhitectura platformei Android
Platforma de executie Android Runtime
– contine si un set de biblioteci nucleu
– scrise in limbajul de programare Java
– care ofera majoritatea functionalitatilor
– disponibile in bibliotecile nucleu ale limbajului de programare Java
1. Arhitectura platformei Android
UPB - ETTI - Curs PPA 28.02.2016 19
Arhitectura platformei Android
Deasupra bibliotecilor native si a platformei de executie se afla un framework al
aplicatiilor
– care este un set de instrumente (toolkit) si API-urile lor
– scris complet in limbajul de programare Java
– utilizat de toate aplicatiile
– atat cele care vin cu telefonul, cum este aplicatia Home
– cat si de aplicatiile de pe telefon (phone apps)
– fie scrise de Google
– fie scrise de alti dezvoltatori
1. Arhitectura platformei Android
UPB - ETTI - Curs PPA 28.02.2016 20
Arhitectura platformei Android
Setul de instrumente (servici si sisteme) oferit de framework include
– un set complex si extensibil de elemente GUI (Views) – utilizate pentru a
construi o aplicatie, incluzand liste, butoane, si chiar un browser Web incapsulabil
– Content Providers – permit aplicatiilor sa acceseze date de la alte aplicatii
(cum ar fi Contacts), sau sa partajeze datele proprii
– Resource Manager – furnizeaza acces la resurse non-cod cum ar fi sirurile
de caractere localizate (dependente de limba), grafice si fisiere layout
– Notification Manager – permite aplicatiilor afisarea unor alerte in bara de stare
– Activity Manager – gestioneaza fazele vietii al aplicatiilor si furnizeaza un
istoric al navigarii (backstack)
1. Arhitectura platformei Android
UPB - ETTI - Curs PPA 28.02.2016 21
Arhitectura platformei Android
Furnizand o platforma de dezvoltare deschisa
– dezvoltatorii au acces complet la API-urile framework folosite de aplicatiile
nucleu
– dezvoltatorii sunt liberi sa profite de accesul la hardware, la informatia de
localizare, sa execute servicii background, sa seteze alarme, sa adauge notificari
in bara de stare, si multe altele
– arhitectura aplicatiilor e proiectata pentru a simplifica reutilizarea
componentelor
– orice aplicatie poate sa isi publice capabilitatile si orice alta aplicatie
poate utiliza aceste capabilitati (subiect al unor constrangeri de securitate
impuse de framework)
– acest mecanism permite inlocuirea componentelor de catre utilizator
1. Arhitectura platformei Android
UPB - ETTI - Curs PPA 28.02.2016 22
Arhitectura platformei Android
Deasupra framework-ului aplicatiilor se afla aplicatiile Android
– scrise complet in limbajul de programare Java
– atat cele care vin cu telefonul, cum sunt aplicatiile Home, Contacts, Phone,
Browser
– cat si de aplicatiile de pe telefon (phone applications)
– fie scrise de Google
– fie scrise de alti dezvoltatori
UPB - ETTI - Curs PPA 28.02.2016 23
2. Programarea pe platforma Android
UPB - ETTI 24
package com.vogella.android.first;
import android.app.Activity;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.widget.EditText;
import android.widget.Toast;
public class MainActivity extends Activity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
if (BuildConfig.DEBUG) { Log.d(Constants.LOG, "onCreated called"); }
setContentView(R.layout.activity_main);
}
// you may have here an onCreateOptionsMenu method
// this method is not required for this exercise therefore I deleted it
public void onClick(View view) {
EditText input = (EditText) findViewById(R.id.main_input);
String string = input.getText().toString();
Toast.makeText(this, string, Toast.LENGTH_LONG).show();
}
}
Exemplu de cod Java / Android
2. Programarea pe platforma Android
UPB - ETTI 25
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.example.android.rssfeed"
android:versionCode="1"
android:versionName="1.0" >
<uses-sdk
android:minSdkVersion="16"
android:targetSdkVersion="19" />
<uses-permission android:name="android.permission.INTERNET" />
<application
android:name="RssApplication"
android:allowBackup="false"
android:icon="@drawable/ic_launcher"
android:label="@string/app_name"
android:theme="@style/AppTheme" >
<activity
android:name="RssfeedActivity"
android:label="@string/title_activity_main" >
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
<activity android:name=".DetailActivity" android:label="Details" > </activity>
<activity android:name="MyPreferenceActivity" > </activity>
<service android:name="RssDownloadService" > </service>
</application>
</manifest>
AndroidManifest.xml
example file
Exemplu de cod XML / Android
2. Programarea pe platforma Android
2. Programarea pe platforma Android
Exista 4 tipuri de componente
– Activitati
– interfete grafice corespunzatoare actiunilor utilizatorului
– Servicii
– procese fara interfata care sunt executate (ruleaza) in background
– Broadcast Receivers
– receptioneaza notificari si reactioneaza la ele
– Furnizori continut
– pun la dispozitie altor aplicatii un set specific de date
UPB - ETTI - Curs PPA 28.02.2016 26
Componentele aplicatiilor Android
2. Programarea pe platforma Android
UPB - ETTI - Curs PPA 28.02.2016 27
Intent – descrierea abstracta a unei operatii
Intent intent = new Intent(Intent.ACTION_MAIN, null);
intent.addCategory(Intent.CATEGORY_LAUNCHER);
ComponentName cn = new ComponentName("com.android.settings",
"com.android.settings.fuelgauge.PowerUsageSummary");
intent.setComponent(cn);
intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
startActivity(intent);
Trimiterea explicita a unui obiect Intent
– nu se foloseste Intent-filter
Intent intent = new Intent(Intent.ACTION_CALL);
intent.setData(Uri.parse("tel:555-1234"));
Definirea unui Intent pentru trimitere implicita
2. Programarea pe platforma Android
UPB - ETTI - Curs PPA 28.02.2016 28
Intent – descrierea abstracta a unei operatii
Trimiterea implicita a unui obiect Intent catre entitatile ce pot executa ACTION_CALL
– se foloseste Intent-filter
startActivity(intent);
Pot executa ACTION_CALL
<activity android:name=".activity.Dashboard" android:label="@string/app_name">
<intent-filter>
<action android:name="android.intent.action.CALL" />
</intent-filter>
</activity>
Definirea Intent-filter in fisierul Androidmanifest.xml
2. Programarea pe platforma Android
UPB - ETTI - Curs PPA 28.02.2016 29
Intent – descrierea abstracta a unei operatii
Trimiterea explicita a unui obiect Intent cu startActivityForResult() de catre Activity1
2. Programarea pe platforma Android
UPB - ETTI - Curs PPA 28.02.2016 30
Intent – descrierea abstracta a unei operatii
Trimiterea explicita a unui obiect Intent cu startActivityForResult() de catre Activity1
Intent data = new Intent();
Uri uri = Uri.parse("content://com.android.contacts/contacts/lookup/318c5d/2098");
data.setData(uri);
setResult(Activity.RESULT_OK, data);
finish();
Activity2 corespunde cu intent si e afisata si executata, iar inainte de a returna,
apeleaza setResult(data)
Intent intent = new Intent(Intent.ACTION_PICK, ContactsContract.Contacts.CONTENT_URI);
startActivityForResult(intent, 9999);
2. Programarea pe platforma Android
UPB - ETTI - Curs PPA 28.02.2016 31
Intent – descrierea abstracta a unei operatii
Atunci cand e apelata metoda onActivityResult()
– Activity1 primeste un Intent rezultat
public void onActivityResult(int requestCode, int resultCode, final Intent data) {
super.onActivityResult(requestCode, resultCode, data);
if (requestCode==9999 && resultCode==Activity.RESULT_OK) {
Uri contactData = data.getData();
// contactData = content://com.android.contacts/contacts/lookup/318c5d/2098
}
}
2. Programarea pe platforma Android
UPB - ETTI - Curs PPA 28.02.2016 32
Componentele
aplicatiilor
Android
2. Programarea pe platforma Android
UPB - ETTI - Curs PPA 28.02.2016 33
Activitati, task-uri, procese
Activitatea este ca o “molecula” – o portiune distincta de functionalitate
Un task este – o colectie de Activitati
Un proces este – un proces Linux standard
2. Programarea pe platforma Android
UPB - ETTI - Curs PPA 28.02.2016 34
Activitati, task-uri, procese
Activitatea este ca o “molecula” – o portiune distincta de functionalitate
Un task este – o colectie de Activitati
Un proces este – un proces Linux standard
2. Programarea pe platforma Android
UPB - ETTI - Curs PPA 28.02.2016 35
Activitati, task-uri, procese
Activitate
– clasa concreta in API
– incapsulare a unei operatii
– ruleaza in procesul .APK-ului care a instalat-o
– optional asociata cu o “fereastra” (UI)
Task
– o notiune (nu o entitate concreta)
– o colectie de Activitati legate intre ele
– capabil sa se intinda peste mai multe procese
– asociat cu propria stiva a istoricului UI (“fereastrelor”)
– similar aplicatiilor de pe alte platforme
2. Programarea pe platforma Android
UPB - ETTI - Curs PPA 28.02.2016 36
Activitati, task-uri, procese
Task – o colectie de Activitati legate intre ele, are propria stiva a istoricului UI
Fiecare noua activitate intr-un task adauga un element in back stack. Cand utilizatorul
apasa tasta BACK, activitatea curenta e distrusa si cea anterioara reluata
2. Programarea pe platforma Android
UPB - ETTI - Curs PPA 28.02.2016 37
Activitati, task-uri, procese
Task – o colectie de Activitati legate intre ele, are propria stiva a istoricului UI
O activitate poate fi
instantiata de mai multe ori
Doua task-uri: Task-ul A este in background,
asteptand sa fie reluat, in timp ce Task-ul B
interactioneaza cu utilizatorul in foreground.
http://developer.android.com/guide/topics/fundamentals/tasks-and-back-stack.html
2. Programarea pe platforma Android
UPB - ETTI - Curs PPA 28.02.2016 38
Activitati, task-uri, procese
Daca o activitate este deja parte a unui task din background cu propria back stack (B),
atunci intreaga back stack revine in prim plan, in varful task-ului curent (A).
2. Programarea pe platforma Android
UPB - ETTI - Curs PPA 28.02.2016 39
Activitati, task-uri, procese
Lansarea unei Activity din Home
Iesirea dintr-o Activity cu tasta BACK
2. Programarea pe platforma Android
UPB - ETTI - Curs PPA 28.02.2016 40
Activitati, task-uri, procese
Iesirea dintr-o Activity cu tasta HOME
http://developer.android.com/guide/practices/ui_guidelines/activity_task_design.html
2. Programarea pe platforma Android
UPB - ETTI - Curs PPA 28.02.2016 41
Activitati, task-uri, procese
Reutilizarea unei Activity – Contacts reutilizeaza Gallery pentru a Obtine o imagine
2. Programarea pe platforma Android
UPB - ETTI - Curs PPA 28.02.2016 42
Activitati, task-uri, procese
Reutilizarea unei Activity – Gallery reutilizeaza Messaging pentru a Partaja o imagine
2. Programarea pe platforma Android
UPB - ETTI - Curs PPA 28.02.2016 43
Activitati, task-uri, procese
Inlocuirea unei Activitati
– utilizatorul descarca activitatea Rings Extended, inlocuitoare a Phone Ringtone
– cand utilizatorul efectueaza Settings > Sound & Display > Phone Ringtone,
sistemul prezinta o alegere intre activitatea Android System si cea noua
– dialogul are optiunea de reamintire a alegerii "Use by default for this action“
– daca se alege "Rings Extended", activitatea se incarca, inlocuind-o pe cea originala
Android System
2. Programarea pe platforma Android
UPB - ETTI - Curs PPA 28.02.2016 44
Fazele aplicatiilor Android
Visible and focused
– activity is visible (on the top of
the task), the user can interact
with the activity
Visible but without the focus
– activity is still visible, but the user cannot
interact with the activity (because of a view,
like a dialog, that has the focus on the top of the
activity)
– activity is paused, but maintains the state
(i.e. member values). It may be killed by the
system in extreme low memory situation
2. Programarea pe platforma Android
UPB - ETTI - Curs PPA 28.02.2016 45
Fazele aplicatiilor Android
Hidden
– activity is completely hidden by
another activity (full-screen)
– activity is stopped, it still retains
all state and members BUT is
often killed by the system when
memory is needed elsewhere
Finished
– an activity that is paused or stopped can be killed by the system
– the system can either call the onDestroy() method or simply kill the
process (without any notification)
– the state is lost in that case
– if the activity is displayed again to the user, it must be completely
restarted and restore its previous state itself (if at all)
2. Programarea pe platforma Android
UPB - ETTI - Curs PPA 28.02.2016 46
Fazele aplicatiilor Android
Activitatea trece
in pauza, starea
ii este mentinuta
Activitatea revine
in prim plan din
pauza
Activitatea este
in prim plan
Activitatea este
oprita, nu mai
este vizibila
Diagrama MSC – schimbul de mesaje
2. Programarea pe platforma Android
UPB - ETTI - Curs PPA 28.02.2016 47
Fazele aplicatiilor Android
Activitatea in
pauza este
distrusa pentru
a se elibera
memorie
Activitatea
revine in prim
plan dupa ce a
fost oprita
Activitatea
oprita este
distrusa pentru
a se elibera
memorie
Diagrama MSC – schimbul de mesaje
2. Programarea pe platforma Android
UPB - ETTI - Curs PPA 28.02.2016 48
Fazele aplicatiilor Android
Diagrama de activitati
2. Programarea pe platforma Android
UPB - ETTI - Curs PPA 28.02.2016 49
Fazele
aplicatiilor
Android
Diagrama de
stari si tranzitii
2. Programarea pe platforma Android
UPB - ETTI - Curs PPA 28.02.2016 50
Fazele aplicatiilor Android Detalii privind metodele asociate
2. Programarea pe platforma Android
UPB - ETTI - Curs PPA 28.02.2016 51
Fazele aplicatiilor Android
Cai prin care o activitate returneaza focusul catre utilizator cu starea sa intacta
– fie e oprita apoi repornita (resumed)
2. Programarea pe platforma Android
UPB - ETTI - Curs PPA 28.02.2016 52
Fazele aplicatiilor Android
Cai prin care o activitate returneaza focusul catre utilizator cu starea sa intacta
– fie e distrusa si apoi recreata, si trebuie sa isi reia starea anterioara
2. Programarea pe platforma Android
UPB - ETTI - Curs PPA 28.02.2016 53
Fazele serviciilor Android
2. Programarea pe platforma Android
UPB - ETTI - Curs PPA 28.02.2016 54
Fazele serviciilor Android
A service that is started
and also allows binding
2. Programarea pe platforma Android
UPB - ETTI - Curs PPA 28.02.2016 55
Exemplu de proiectare a unei aplicatii Android Teach Yourself Android App Dev in 24 hrs 2010
Presupunem ca vrem sa proiectam joc numit Chippy’s Revenge, cu 5 ecrane
Splash – ecran startup, cu logo-ul si versiunea jocului, eventual o melodie
Menu – ecran de selectie a unor optiuni (play game, view scores, read help)
Play – ecranul in care se desfasoara jocul
Scores – ecran pentru afisarea celor mai mari scoruri ale jocurilor (incluzandu-le
pe cele obtinute de alti jucatori)
Help – ecran de instructiuni cu regulile jocului, modul de joc, scor, sfaturi, etc.
2. Programarea pe platforma Android
UPB - ETTI - Curs PPA 28.02.2016 56
Exemplu de proiectare a unei aplicatii Android
In acest caz trebuie sa implementam 5 clase activitate (derivate din Activity)
SplashActivity – Activitate implicita la lansare, care afiseaza un layout, reda
muzica pentru cateva secunde, apoi lanseaza MenuActivity
MenuActivity – Activitate care afiseaza butoane corespondente caracteristicilor
aplicatiei. Metodele handler onClick() pentru fiecare buton lanseaza activitatile
asociate
PlayActivity – Activitate care implementeaza aplicatia reala, desenand pe ecran,
raspunzand la interactiunea cu utilizatorul, pastrand scorul, oferind in general
suport pentru tot ce e necesar in desfasurarea jocului
ScoresActivity – Activitate simpla ca si SplashActivity, care afiseaza
informatiile privind scorul intr-un TextView
HelpActivity – Activitate aproape identica cu ScoresActivity, care afiseaza
textul help, intr-un TextView eventual cu scroll
2. Programarea pe platforma Android
UPB - ETTI - Curs PPA 28.02.2016 57
Exemplu de proiectare a unei aplicatii Android
2. Programarea pe platforma Android
UPB - ETTI - Curs PPA 28.02.2016 58
Tratarea evenimentelor – crearea inline a “ascultatoarelor”
public class LoginExample extends Activity {
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
// Set Click Listeners
btnLogin.setOnClickListener(new OnClickListener() {
public void onClick(View v) {
// Check Login
String username = etUsername.getText().toString();
String password = etPassword.getText().toString();
if(username.equals("guest") && password.equals("guest")){
lblResult.setText("Login successful.");
} else {
lblResult.setText("Login failed. Username and/or password doesn't match.");
}
}
});
btnCancel.setOnClickListener(new OnClickListener() {
public void onClick(View v) {
// Close the application
finish();
}
});
}
Ascultator inline
Ascultator inline
2. Programarea pe platforma Android
UPB - ETTI - Curs PPA 28.02.2016 59
Tratarea evenimentelor – crearea inline a “ascultatoarelor”
import android.app.Activity;
import android.os.Bundle;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.TextView;
public class EventListenerForButtonActivity extends Activity {
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
//1-Capture your button from View
Button clickMe =(Button)findViewById(R.id.button);
//2-Register your OnClickListener with your implementation
clickMe.setOnClickListener( new OnClickListener() {
public void onClick(View v) {
//3- do some thing use full in here
TextView clickMeText = (TextView)findViewById(R.id.textView);
clickMeText.setText("You Clicked Me");
}
});
}
}
Ascultator inline
http://sanathnandasiri.blogspot.com/2011/07/add-event-listener-for-button.html
2. Programarea pe platforma Android
UPB - ETTI - Curs PPA 28.02.2016 60
Tratarea evenimentelor – crearea inline a “ascultatoarelor”
Advantaje
– cod redus si compact
– usor de implementat
Dezavantaje
– cod inflexibil
– nu poate fi reutilizat
– poate fi destul de greu de mentinut (adaptat)
Utilizare
– pentru metode scurte care sunt utilizate o singura data
– cum sunt cele de tratare a unor butoane care produc inchiderea /
afisarea unei ferestre
2. Programarea pe platforma Android
UPB - ETTI - Curs PPA 28.02.2016 61
public class LoginExampleImplements extends Activity implements OnClickListener {
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
// Set Click Listeners
btnLogin.setOnClickListener(this);
btnCancel.setOnClickListener(this);
}
public void onClick(View v) {
if(v==btnLogin) {
// Check Login
String username = etUsername.getText().toString();
String password = etPassword.getText().toString();
if(username.equals("guest") && password.equals("guest")){
lblResult.setText("Login successful.");
} else {
lblResult.setText("Login failed. Username and/or password doesn't match.");
}
} else if(v==btnCancel) {
// Close the application
finish();
}
}
}
Tratarea evenimentelor – transformarea activitatii in “ascultator”
Activitatea e ascultator
2. Programarea pe platforma Android
UPB - ETTI - Curs PPA 28.02.2016 62
import android.app.Activity;
import android.os.Bundle;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.TextView;
//3- you should implement Listener interface in your Activity class
public class EventListenerForButtonActivity extends Activity implements OnClickListener{
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
//1-Capture your button from View
Button clickMe =(Button)findViewById(R.id.button);
//2-Register your OnClickListener with your Activity class itself
clickMe.setOnClickListener(this);
}
//4-Override unimplemented class
public void onClick(View v) {
//5- do some thing use full in here
TextView clickMeText = (TextView)findViewById(R.id.textView);
clickMeText.setText("You Clicked Me");
}
}
Tratarea evenimentelor – transformarea activitatii in “ascultator”
Activitatea e ascultator
2. Programarea pe platforma Android
UPB - ETTI - Curs PPA 28.02.2016 63
Tratarea evenimentelor – transformarea activitatii in “ascultator”
Advantaje
– metodele si “ascultatorii” pot fi reutilizati in mai multe widget-uri diferite
– codul mai multor “ascultatori” este plasat in aceeasi sectiune de cod
– se poate crea o metoda pentru “ascultatori” similari
Dezavantaje
– poate contine mult cod nenecesar si dispersat, daca actiunile executate
sunt foarte diferite si trebuie adaugate blocuri if / elseif / else, facand codul
greu de citit
– poate exista o singura implementare a unui astfel de “ascultator” pe clasa
Utilizare
– pentru cazul in care sunt multiple widget-uri / elemente care utilizeaza
“ascultatori” similari sau acelasi “ascultator”
– cum ar fi un calculator cu zeci de butoane, ca in exemplul urmator:
2. Programarea pe platforma Android
UPB - ETTI - Curs PPA 28.02.2016 64
public class CalculatorExample extends Activity implements OnClickListener {
public void onClick(View v) {
if(v==btnCalculate) {
// Parse and calculate formula
String formula = etFormula.getText().toString();
Double result = performCalculation(formula);
// Update the result TextView
tvResult.setText(Strint.valueOf(result));
// End it as we don't need or want to update the Formula field
return;
}
// Get the button
Button button = (Button)v;
// Get the String/Button description
String strToAppend = button.getText().toString();
// Update Formula
etFormula.append(strToAppend);
}
}
Tratarea evenimentelor – transformarea activitatii in “ascultator”
2. Programarea pe platforma Android
UPB - ETTI - Curs PPA 28.02.2016 65
Tratarea evenimentelor – utilizarea unor obiecte “ascultator”
public class LoginExampleVariableImplementation extends Activity {
OnClickListener myClickListener = new OnClickListener() {
public void onClick(View v) {
if(v==btnLogin) {
// Check Login
String username = etUsername.getText().toString();
String password = etPassword.getText().toString();
if(username.equals("guest") && password.equals("guest")){
lblResult.setText("Login successful.");
} else {
lblResult.setText("Login failed. Username and/or password doesn't match.");
}
} else if(v==btnCancel) {
// Close the application
finish();
}
}
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
// Set Click Listeners
btnLogin.setOnClickListener(myClickListener);
btnCancel.setOnClickListener(myClickListener);
}
}
Obiect ascultator
2. Programarea pe platforma Android
UPB - ETTI - Curs PPA 28.02.2016 66
Tratarea evenimentelor – utilizarea unor obiecte “ascultator”
import android.app.Activity;
import android.os.Bundle;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.TextView;
public class EventListenerForButtonActivity extends Activity {
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
//1-Capture your button from View
Button clickMe =(Button)findViewById(R.id.button);
//3-Register your OnClickListener with your implementation
clickMe.setOnClickListener(clickMeListener);
}
//2-Implementation of your button's OnClickListener as local variable
private OnClickListener clickMeListener = new OnClickListener() {
public void onClick(View v) {
//4- do some thing use full in here
TextView clickMeText = (TextView)findViewById(R.id.textView);
clickMeText.setText("You Clicked Me");
}
};
}
Obiect ascultator
2. Programarea pe platforma Android
UPB - ETTI - Curs PPA 28.02.2016 67
Tratarea evenimentelor – utilizarea unor obiecte “ascultator”
Advantaje
– cod (obiect) reutilizabil
– codul mai multor “ascultatori” este plasat in aceeasi sectiune de cod
– se pot crea mai multi “ascultatori” de acelasi fel
Dezavantaje
– foarte multi ascultatori pot duce la un cod greu de citit
Utilizare
– pentru cazul in care sunt necesari “ascultatori” diferiti pentru aceeasi
actiune
– cum ar fi doua OnClickListener care executa 2 sarcini complet diferite
– pentru cazul in care se implementeaza proprii “ascultatori” pentru propriile
widget-uri
2. Programarea pe platforma Android
UPB - ETTI - Curs PPA 28.02.2016 68
Tratarea evenimentelor – utilizarea unor obiecte “ascultator”
public class MyWidget extends View {
OnClickListener myClickListener = null;
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
...
}
public void setOnClickListener(OnClickListener listener) {
myClickListener = listener;
}
public void onClick(View v) {
// Check if Listener was set and call the onClick Method
if(myClickListener!=null)
myClickListener.onClick(v);
}
private void handleEventsMethod() {
...
// handle clicks
onClick(this);
}
} http://tseng-blog.nge-web.net/blog/2009/02/14/implementing-listeners-in-your-android-java-application/
http://tseng-blog.nge-web.net/blog/2009/02/17/how-implement-your-own-listener-android-java/
top related