UPB - Facultatea ETTI -...

68
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

Transcript of UPB - Facultatea ETTI -...

Page 1: UPB - Facultatea ETTI - discipline.elcom.pub.rodiscipline.elcom.pub.ro/saim/ppa/Note_curs_1_PPA_2016_v01.pdf · UPB - ETTI - Curs PPA 28.02.2016 19 Arhitectura platformei Android

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

Page 2: UPB - Facultatea ETTI - discipline.elcom.pub.rodiscipline.elcom.pub.ro/saim/ppa/Note_curs_1_PPA_2016_v01.pdf · UPB - ETTI - Curs PPA 28.02.2016 19 Arhitectura platformei Android

UPB - ETTI - Curs PPA 28.02.2016 2

0. Resurse online

Page 3: UPB - Facultatea ETTI - discipline.elcom.pub.rodiscipline.elcom.pub.ro/saim/ppa/Note_curs_1_PPA_2016_v01.pdf · UPB - ETTI - Curs PPA 28.02.2016 19 Arhitectura platformei Android

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/

Page 4: UPB - Facultatea ETTI - discipline.elcom.pub.rodiscipline.elcom.pub.ro/saim/ppa/Note_curs_1_PPA_2016_v01.pdf · UPB - ETTI - Curs PPA 28.02.2016 19 Arhitectura platformei Android

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

Page 5: UPB - Facultatea ETTI - discipline.elcom.pub.rodiscipline.elcom.pub.ro/saim/ppa/Note_curs_1_PPA_2016_v01.pdf · UPB - ETTI - Curs PPA 28.02.2016 19 Arhitectura platformei Android

0. Resurse online

UPB - ETTI - Curs PPA 28.02.2016 5

Android Tutorial – Vogella http://www.vogella.com/tutorials/Android/article.html

Page 6: UPB - Facultatea ETTI - discipline.elcom.pub.rodiscipline.elcom.pub.ro/saim/ppa/Note_curs_1_PPA_2016_v01.pdf · UPB - ETTI - Curs PPA 28.02.2016 19 Arhitectura platformei Android

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)

Page 7: UPB - Facultatea ETTI - discipline.elcom.pub.rodiscipline.elcom.pub.ro/saim/ppa/Note_curs_1_PPA_2016_v01.pdf · UPB - ETTI - Curs PPA 28.02.2016 19 Arhitectura platformei Android

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

Page 8: UPB - Facultatea ETTI - discipline.elcom.pub.rodiscipline.elcom.pub.ro/saim/ppa/Note_curs_1_PPA_2016_v01.pdf · UPB - ETTI - Curs PPA 28.02.2016 19 Arhitectura platformei Android

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

Page 9: UPB - Facultatea ETTI - discipline.elcom.pub.rodiscipline.elcom.pub.ro/saim/ppa/Note_curs_1_PPA_2016_v01.pdf · UPB - ETTI - Curs PPA 28.02.2016 19 Arhitectura platformei Android

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

Page 10: UPB - Facultatea ETTI - discipline.elcom.pub.rodiscipline.elcom.pub.ro/saim/ppa/Note_curs_1_PPA_2016_v01.pdf · UPB - ETTI - Curs PPA 28.02.2016 19 Arhitectura platformei Android

UPB - ETTI - Curs PPA 28.02.2016 10

1. Arhitectura platformei Android

Page 11: UPB - Facultatea ETTI - discipline.elcom.pub.rodiscipline.elcom.pub.ro/saim/ppa/Note_curs_1_PPA_2016_v01.pdf · UPB - ETTI - Curs PPA 28.02.2016 19 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

Page 12: UPB - Facultatea ETTI - discipline.elcom.pub.rodiscipline.elcom.pub.ro/saim/ppa/Note_curs_1_PPA_2016_v01.pdf · UPB - ETTI - Curs PPA 28.02.2016 19 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 12

Android

Page 13: UPB - Facultatea ETTI - discipline.elcom.pub.rodiscipline.elcom.pub.ro/saim/ppa/Note_curs_1_PPA_2016_v01.pdf · UPB - ETTI - Curs PPA 28.02.2016 19 Arhitectura platformei Android

1. Arhitectura platformei Android

UPB - ETTI - Curs PPA 28.02.2016 13

Arhitectura platformei Android

Page 14: UPB - Facultatea ETTI - discipline.elcom.pub.rodiscipline.elcom.pub.ro/saim/ppa/Note_curs_1_PPA_2016_v01.pdf · UPB - ETTI - Curs PPA 28.02.2016 19 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)

Page 15: UPB - Facultatea ETTI - discipline.elcom.pub.rodiscipline.elcom.pub.ro/saim/ppa/Note_curs_1_PPA_2016_v01.pdf · UPB - ETTI - Curs PPA 28.02.2016 19 Arhitectura platformei Android

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

Page 16: UPB - Facultatea ETTI - discipline.elcom.pub.rodiscipline.elcom.pub.ro/saim/ppa/Note_curs_1_PPA_2016_v01.pdf · UPB - ETTI - Curs PPA 28.02.2016 19 Arhitectura platformei Android

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

Page 17: UPB - Facultatea ETTI - discipline.elcom.pub.rodiscipline.elcom.pub.ro/saim/ppa/Note_curs_1_PPA_2016_v01.pdf · UPB - ETTI - Curs PPA 28.02.2016 19 Arhitectura platformei Android

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

Page 18: UPB - Facultatea ETTI - discipline.elcom.pub.rodiscipline.elcom.pub.ro/saim/ppa/Note_curs_1_PPA_2016_v01.pdf · UPB - ETTI - Curs PPA 28.02.2016 19 Arhitectura platformei Android

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

Page 19: UPB - Facultatea ETTI - discipline.elcom.pub.rodiscipline.elcom.pub.ro/saim/ppa/Note_curs_1_PPA_2016_v01.pdf · UPB - ETTI - Curs PPA 28.02.2016 19 Arhitectura platformei Android

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

Page 20: UPB - Facultatea ETTI - discipline.elcom.pub.rodiscipline.elcom.pub.ro/saim/ppa/Note_curs_1_PPA_2016_v01.pdf · UPB - ETTI - Curs PPA 28.02.2016 19 Arhitectura platformei Android

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)

Page 21: UPB - Facultatea ETTI - discipline.elcom.pub.rodiscipline.elcom.pub.ro/saim/ppa/Note_curs_1_PPA_2016_v01.pdf · UPB - ETTI - Curs PPA 28.02.2016 19 Arhitectura platformei Android

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

Page 22: UPB - Facultatea ETTI - discipline.elcom.pub.rodiscipline.elcom.pub.ro/saim/ppa/Note_curs_1_PPA_2016_v01.pdf · UPB - ETTI - Curs PPA 28.02.2016 19 Arhitectura platformei Android

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

Page 23: UPB - Facultatea ETTI - discipline.elcom.pub.rodiscipline.elcom.pub.ro/saim/ppa/Note_curs_1_PPA_2016_v01.pdf · UPB - ETTI - Curs PPA 28.02.2016 19 Arhitectura platformei Android

UPB - ETTI - Curs PPA 28.02.2016 23

2. Programarea pe platforma Android

Page 24: UPB - Facultatea ETTI - discipline.elcom.pub.rodiscipline.elcom.pub.ro/saim/ppa/Note_curs_1_PPA_2016_v01.pdf · UPB - ETTI - Curs PPA 28.02.2016 19 Arhitectura platformei 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

Page 25: UPB - Facultatea ETTI - discipline.elcom.pub.rodiscipline.elcom.pub.ro/saim/ppa/Note_curs_1_PPA_2016_v01.pdf · UPB - ETTI - Curs PPA 28.02.2016 19 Arhitectura platformei 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

Page 26: UPB - Facultatea ETTI - discipline.elcom.pub.rodiscipline.elcom.pub.ro/saim/ppa/Note_curs_1_PPA_2016_v01.pdf · UPB - ETTI - Curs PPA 28.02.2016 19 Arhitectura platformei 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

Page 27: UPB - Facultatea ETTI - discipline.elcom.pub.rodiscipline.elcom.pub.ro/saim/ppa/Note_curs_1_PPA_2016_v01.pdf · UPB - ETTI - Curs PPA 28.02.2016 19 Arhitectura platformei 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

Page 28: UPB - Facultatea ETTI - discipline.elcom.pub.rodiscipline.elcom.pub.ro/saim/ppa/Note_curs_1_PPA_2016_v01.pdf · UPB - ETTI - Curs PPA 28.02.2016 19 Arhitectura platformei Android

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

Page 29: UPB - Facultatea ETTI - discipline.elcom.pub.rodiscipline.elcom.pub.ro/saim/ppa/Note_curs_1_PPA_2016_v01.pdf · UPB - ETTI - Curs PPA 28.02.2016 19 Arhitectura platformei Android

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

Page 30: UPB - Facultatea ETTI - discipline.elcom.pub.rodiscipline.elcom.pub.ro/saim/ppa/Note_curs_1_PPA_2016_v01.pdf · UPB - ETTI - Curs PPA 28.02.2016 19 Arhitectura platformei Android

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);

Page 31: UPB - Facultatea ETTI - discipline.elcom.pub.rodiscipline.elcom.pub.ro/saim/ppa/Note_curs_1_PPA_2016_v01.pdf · UPB - ETTI - Curs PPA 28.02.2016 19 Arhitectura platformei Android

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

}

}

Page 32: UPB - Facultatea ETTI - discipline.elcom.pub.rodiscipline.elcom.pub.ro/saim/ppa/Note_curs_1_PPA_2016_v01.pdf · UPB - ETTI - Curs PPA 28.02.2016 19 Arhitectura platformei Android

2. Programarea pe platforma Android

UPB - ETTI - Curs PPA 28.02.2016 32

Componentele

aplicatiilor

Android

Page 33: UPB - Facultatea ETTI - discipline.elcom.pub.rodiscipline.elcom.pub.ro/saim/ppa/Note_curs_1_PPA_2016_v01.pdf · UPB - ETTI - Curs PPA 28.02.2016 19 Arhitectura platformei 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

Page 34: UPB - Facultatea ETTI - discipline.elcom.pub.rodiscipline.elcom.pub.ro/saim/ppa/Note_curs_1_PPA_2016_v01.pdf · UPB - ETTI - Curs PPA 28.02.2016 19 Arhitectura platformei Android

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

Page 35: UPB - Facultatea ETTI - discipline.elcom.pub.rodiscipline.elcom.pub.ro/saim/ppa/Note_curs_1_PPA_2016_v01.pdf · UPB - ETTI - Curs PPA 28.02.2016 19 Arhitectura platformei Android

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

Page 36: UPB - Facultatea ETTI - discipline.elcom.pub.rodiscipline.elcom.pub.ro/saim/ppa/Note_curs_1_PPA_2016_v01.pdf · UPB - ETTI - Curs PPA 28.02.2016 19 Arhitectura platformei Android

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

Page 37: UPB - Facultatea ETTI - discipline.elcom.pub.rodiscipline.elcom.pub.ro/saim/ppa/Note_curs_1_PPA_2016_v01.pdf · UPB - ETTI - Curs PPA 28.02.2016 19 Arhitectura platformei Android

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

Page 38: UPB - Facultatea ETTI - discipline.elcom.pub.rodiscipline.elcom.pub.ro/saim/ppa/Note_curs_1_PPA_2016_v01.pdf · UPB - ETTI - Curs PPA 28.02.2016 19 Arhitectura platformei Android

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).

Page 39: UPB - Facultatea ETTI - discipline.elcom.pub.rodiscipline.elcom.pub.ro/saim/ppa/Note_curs_1_PPA_2016_v01.pdf · UPB - ETTI - Curs PPA 28.02.2016 19 Arhitectura platformei Android

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

Page 40: UPB - Facultatea ETTI - discipline.elcom.pub.rodiscipline.elcom.pub.ro/saim/ppa/Note_curs_1_PPA_2016_v01.pdf · UPB - ETTI - Curs PPA 28.02.2016 19 Arhitectura platformei Android

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

Page 41: UPB - Facultatea ETTI - discipline.elcom.pub.rodiscipline.elcom.pub.ro/saim/ppa/Note_curs_1_PPA_2016_v01.pdf · UPB - ETTI - Curs PPA 28.02.2016 19 Arhitectura platformei Android

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

Page 42: UPB - Facultatea ETTI - discipline.elcom.pub.rodiscipline.elcom.pub.ro/saim/ppa/Note_curs_1_PPA_2016_v01.pdf · UPB - ETTI - Curs PPA 28.02.2016 19 Arhitectura platformei Android

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

Page 43: UPB - Facultatea ETTI - discipline.elcom.pub.rodiscipline.elcom.pub.ro/saim/ppa/Note_curs_1_PPA_2016_v01.pdf · UPB - ETTI - Curs PPA 28.02.2016 19 Arhitectura platformei Android

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

Page 44: UPB - Facultatea ETTI - discipline.elcom.pub.rodiscipline.elcom.pub.ro/saim/ppa/Note_curs_1_PPA_2016_v01.pdf · UPB - ETTI - Curs PPA 28.02.2016 19 Arhitectura platformei Android

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

Page 45: UPB - Facultatea ETTI - discipline.elcom.pub.rodiscipline.elcom.pub.ro/saim/ppa/Note_curs_1_PPA_2016_v01.pdf · UPB - ETTI - Curs PPA 28.02.2016 19 Arhitectura platformei Android

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)

Page 46: UPB - Facultatea ETTI - discipline.elcom.pub.rodiscipline.elcom.pub.ro/saim/ppa/Note_curs_1_PPA_2016_v01.pdf · UPB - ETTI - Curs PPA 28.02.2016 19 Arhitectura platformei Android

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

Page 47: UPB - Facultatea ETTI - discipline.elcom.pub.rodiscipline.elcom.pub.ro/saim/ppa/Note_curs_1_PPA_2016_v01.pdf · UPB - ETTI - Curs PPA 28.02.2016 19 Arhitectura platformei Android

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

Page 48: UPB - Facultatea ETTI - discipline.elcom.pub.rodiscipline.elcom.pub.ro/saim/ppa/Note_curs_1_PPA_2016_v01.pdf · UPB - ETTI - Curs PPA 28.02.2016 19 Arhitectura platformei Android

2. Programarea pe platforma Android

UPB - ETTI - Curs PPA 28.02.2016 48

Fazele aplicatiilor Android

Diagrama de activitati

Page 49: UPB - Facultatea ETTI - discipline.elcom.pub.rodiscipline.elcom.pub.ro/saim/ppa/Note_curs_1_PPA_2016_v01.pdf · UPB - ETTI - Curs PPA 28.02.2016 19 Arhitectura platformei Android

2. Programarea pe platforma Android

UPB - ETTI - Curs PPA 28.02.2016 49

Fazele

aplicatiilor

Android

Diagrama de

stari si tranzitii

Page 50: UPB - Facultatea ETTI - discipline.elcom.pub.rodiscipline.elcom.pub.ro/saim/ppa/Note_curs_1_PPA_2016_v01.pdf · UPB - ETTI - Curs PPA 28.02.2016 19 Arhitectura platformei Android

2. Programarea pe platforma Android

UPB - ETTI - Curs PPA 28.02.2016 50

Fazele aplicatiilor Android Detalii privind metodele asociate

Page 51: UPB - Facultatea ETTI - discipline.elcom.pub.rodiscipline.elcom.pub.ro/saim/ppa/Note_curs_1_PPA_2016_v01.pdf · UPB - ETTI - Curs PPA 28.02.2016 19 Arhitectura platformei Android

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)

Page 52: UPB - Facultatea ETTI - discipline.elcom.pub.rodiscipline.elcom.pub.ro/saim/ppa/Note_curs_1_PPA_2016_v01.pdf · UPB - ETTI - Curs PPA 28.02.2016 19 Arhitectura platformei Android

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

Page 53: UPB - Facultatea ETTI - discipline.elcom.pub.rodiscipline.elcom.pub.ro/saim/ppa/Note_curs_1_PPA_2016_v01.pdf · UPB - ETTI - Curs PPA 28.02.2016 19 Arhitectura platformei Android

2. Programarea pe platforma Android

UPB - ETTI - Curs PPA 28.02.2016 53

Fazele serviciilor Android

Page 54: UPB - Facultatea ETTI - discipline.elcom.pub.rodiscipline.elcom.pub.ro/saim/ppa/Note_curs_1_PPA_2016_v01.pdf · UPB - ETTI - Curs PPA 28.02.2016 19 Arhitectura platformei 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

Page 55: UPB - Facultatea ETTI - discipline.elcom.pub.rodiscipline.elcom.pub.ro/saim/ppa/Note_curs_1_PPA_2016_v01.pdf · UPB - ETTI - Curs PPA 28.02.2016 19 Arhitectura platformei Android

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.

Page 56: UPB - Facultatea ETTI - discipline.elcom.pub.rodiscipline.elcom.pub.ro/saim/ppa/Note_curs_1_PPA_2016_v01.pdf · UPB - ETTI - Curs PPA 28.02.2016 19 Arhitectura platformei Android

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

Page 57: UPB - Facultatea ETTI - discipline.elcom.pub.rodiscipline.elcom.pub.ro/saim/ppa/Note_curs_1_PPA_2016_v01.pdf · UPB - ETTI - Curs PPA 28.02.2016 19 Arhitectura platformei Android

2. Programarea pe platforma Android

UPB - ETTI - Curs PPA 28.02.2016 57

Exemplu de proiectare a unei aplicatii Android

Page 58: UPB - Facultatea ETTI - discipline.elcom.pub.rodiscipline.elcom.pub.ro/saim/ppa/Note_curs_1_PPA_2016_v01.pdf · UPB - ETTI - Curs PPA 28.02.2016 19 Arhitectura platformei 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

Page 59: UPB - Facultatea ETTI - discipline.elcom.pub.rodiscipline.elcom.pub.ro/saim/ppa/Note_curs_1_PPA_2016_v01.pdf · UPB - ETTI - Curs PPA 28.02.2016 19 Arhitectura platformei Android

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

Page 60: UPB - Facultatea ETTI - discipline.elcom.pub.rodiscipline.elcom.pub.ro/saim/ppa/Note_curs_1_PPA_2016_v01.pdf · UPB - ETTI - Curs PPA 28.02.2016 19 Arhitectura platformei Android

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

Page 61: UPB - Facultatea ETTI - discipline.elcom.pub.rodiscipline.elcom.pub.ro/saim/ppa/Note_curs_1_PPA_2016_v01.pdf · UPB - ETTI - Curs PPA 28.02.2016 19 Arhitectura platformei Android

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

Page 62: UPB - Facultatea ETTI - discipline.elcom.pub.rodiscipline.elcom.pub.ro/saim/ppa/Note_curs_1_PPA_2016_v01.pdf · UPB - ETTI - Curs PPA 28.02.2016 19 Arhitectura platformei Android

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

Page 63: UPB - Facultatea ETTI - discipline.elcom.pub.rodiscipline.elcom.pub.ro/saim/ppa/Note_curs_1_PPA_2016_v01.pdf · UPB - ETTI - Curs PPA 28.02.2016 19 Arhitectura platformei Android

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:

Page 64: UPB - Facultatea ETTI - discipline.elcom.pub.rodiscipline.elcom.pub.ro/saim/ppa/Note_curs_1_PPA_2016_v01.pdf · UPB - ETTI - Curs PPA 28.02.2016 19 Arhitectura platformei Android

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”

Page 65: UPB - Facultatea ETTI - discipline.elcom.pub.rodiscipline.elcom.pub.ro/saim/ppa/Note_curs_1_PPA_2016_v01.pdf · UPB - ETTI - Curs PPA 28.02.2016 19 Arhitectura platformei Android

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

Page 66: UPB - Facultatea ETTI - discipline.elcom.pub.rodiscipline.elcom.pub.ro/saim/ppa/Note_curs_1_PPA_2016_v01.pdf · UPB - ETTI - Curs PPA 28.02.2016 19 Arhitectura platformei Android

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

Page 67: UPB - Facultatea ETTI - discipline.elcom.pub.rodiscipline.elcom.pub.ro/saim/ppa/Note_curs_1_PPA_2016_v01.pdf · UPB - ETTI - Curs PPA 28.02.2016 19 Arhitectura platformei Android

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

Page 68: UPB - Facultatea ETTI - discipline.elcom.pub.rodiscipline.elcom.pub.ro/saim/ppa/Note_curs_1_PPA_2016_v01.pdf · UPB - ETTI - Curs PPA 28.02.2016 19 Arhitectura platformei Android

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/