Razvoj usluga i aplikacija za operacijski sustav AndroidSadržaj projekta Android aplikacije u...

42
Preddiplomski studij Diplomski studij Ak.g. 2012./2013. Razvoj usluga i aplikacija za operacijski sustav Android Zaštićeno licencom http://creativecommons.org/licenses/by-nc-sa/2.5/hr/ 7. 11. 2012. 5. Elementi grafičkog sučelja u Androidu Zaštićeno licencom http://creativecommons.org/licenses/by-nc-sa/2.5/hr/

Transcript of Razvoj usluga i aplikacija za operacijski sustav AndroidSadržaj projekta Android aplikacije u...

Page 2: Razvoj usluga i aplikacija za operacijski sustav AndroidSadržaj projekta Android aplikacije u Eclipse-u Mapa src – ovdje stavljamo cijeli programski kod Mapa res – ovdje stavljamo

Creative Commons

slobodno smijete: dijeliti — umnožavati, distribuirati i javnosti priopćavati djelo

remiksirati — prerađivati djelo

pod sljedećim uvjetima: imenovanje. Morate priznati i označiti autorstvo djela na način kako je

specificirao autor ili davatelj licence (ali ne način koji bi sugerirao da Vi ili Vaše korištenje njegova djela imate njegovu izravnu podršku).

nekomercijalno. Ovo djelo ne smijete koristiti u komercijalne svrhe.

dijeli pod istim uvjetima. Ako ovo djelo izmijenite, preoblikujete ili stvarate koristeći ga, preradu možete distribuirati samo pod licencom koja je ista ili slična ovoj.

U slučaju daljnjeg korištenja ili distribuiranja morate drugima jasno dati do znanja licencne uvjete

ovog djela. Najbolji način da to učinite je linkom na ovu internetsku stranicu.

Od svakog od gornjih uvjeta moguće je odstupiti, ako dobijete dopuštenje nositelja autorskog prava.

Ništa u ovoj licenci ne narušava ili ograničava autorova moralna prava.

Tekst licencije preuzet je s http://creativecommons.org/.

7. 11. 2012.

Page 3: Razvoj usluga i aplikacija za operacijski sustav AndroidSadržaj projekta Android aplikacije u Eclipse-u Mapa src – ovdje stavljamo cijeli programski kod Mapa res – ovdje stavljamo

Sadržaj predavanja

Kratki uvod u model Android aplikacija

Stvaranje jednostavne aplikacije od nule

Osnovni elementi korisničkog sučelja Kontrole unosa i događaji nad njima

Skočne poruke i dijalozi

Namjere

7. 11. 2012.

Page 4: Razvoj usluga i aplikacija za operacijski sustav AndroidSadržaj projekta Android aplikacije u Eclipse-u Mapa src – ovdje stavljamo cijeli programski kod Mapa res – ovdje stavljamo

Android aplikacije

Prikaz predočava informacije

korisniku aplikacije

Upravljanje prati korisničke radnje

i reagira na njih

Model obuhvaća cjelokupnu

aplikacijsku i podatkovnu logiku

aplikacije

7. 11. 2012.

Temelje se na arhitekturnom obrascu Model-Prikaz-

Upravljanje (Model-View-Controller, MVC)

Page 5: Razvoj usluga i aplikacija za operacijski sustav AndroidSadržaj projekta Android aplikacije u Eclipse-u Mapa src – ovdje stavljamo cijeli programski kod Mapa res – ovdje stavljamo

Osnovni elementi Android aplikacije

Aktivnosti (Activities) Jednostavni fokusirani zadatak kojeg korisnik može činiti

Usluge (Services) Pozadinski procesi, nevidljivi u pozadini

Pružatelji sadržaja (Content Providers) Trajna pohrana i pristup podacima

Namjere (Intents) Poruke koje razmjenjuju dijelovi aplikacije i aplikacije međusobno

Primatelji namjera (Broadcast Receivers) Pokretači aplikacija

Aplikacije na početnom zaslonu (Widgets)

Obavijesti (Notifications) Obavješćivanje korisnika bez prekidanja trenutne aktivnosti

7. 11. 2012.

Page 6: Razvoj usluga i aplikacija za operacijski sustav AndroidSadržaj projekta Android aplikacije u Eclipse-u Mapa src – ovdje stavljamo cijeli programski kod Mapa res – ovdje stavljamo

Sadržaj projekta Android aplikacije u Eclipse-u

Mapa src – ovdje stavljamo cijeli programski kod

Mapa res – ovdje stavljamo vanjske resurse: Jednostavni resursi (strings, colors, dimensions,

styles te string ili integer polja) Styles and Themes Drawables Layouts Animations Menus

Mapa gen – programski kod kojeg Eclipse sam generira Datoteka R.java pridružuje svakom resursu jedan

jedinstveni ID AndroidManifest.xml – definira

osnovne elemente Android aplikacije te putem ovlasti i filtra namjera definira njihovu interakciju

7. 11. 2012.

Page 7: Razvoj usluga i aplikacija za operacijski sustav AndroidSadržaj projekta Android aplikacije u Eclipse-u Mapa src – ovdje stavljamo cijeli programski kod Mapa res – ovdje stavljamo

Aktivnost: Stvaranje

Glavna aktivnost se stvara u 2 koraka: 1. Stvaranje Java klase koja predstavlja aktivnost

2. Definiranje aktivnosti u manifestu – povezuje se programski kod

sa njegovom ulogom u aplikaciji

7. 11. 2012.

<manifest xmlns:android="http://schemas.android.com/apk/res/android" … <application android:label="@string/app_name" android:icon="@drawable/ic_launcher" android:theme="@style/AppTheme"> <activity android:name="FirstActivity"> <intent-filter> <category android:name="android.intent.category.LAUNCHER"/> <action android:name="android.intent.action.MAIN"/> </intent-filter> </activity> </application> </manifest>

Page 8: Razvoj usluga i aplikacija za operacijski sustav AndroidSadržaj projekta Android aplikacije u Eclipse-u Mapa src – ovdje stavljamo cijeli programski kod Mapa res – ovdje stavljamo

Aktivnost: Definiranje prikaza

Prikaz aktivnosti se može definirati programski i/ili putem

layout-a (XML datoteka)

Programsko definiranje je vrlo nepraktično i naporno te se

stoga izbjegava

Layout je standardni način definiranja prikaza

7. 11. 2012.

Eclipse sadrži GUI za olakšano

definiranje layout-a

Novi elementi prikaza se lako dodaju u

layout (drag and drop)

Prilikom kreiranja aktivnosti, samo se

pozove učitavanje prikaza iz layouta:

this.setContentView(R.layout.layout_name);

Page 9: Razvoj usluga i aplikacija za operacijski sustav AndroidSadržaj projekta Android aplikacije u Eclipse-u Mapa src – ovdje stavljamo cijeli programski kod Mapa res – ovdje stavljamo

Definiranje prikaza aktivnosti XML datotekom

XML datoteka res/result_activity.xml <?xml version="1.0" encoding="utf-8"?>

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"

android:layout_width="match_parent"

android:layout_height="match_parent"

android:clickable="true"

android:orientation="vertical" >

<TextView

android:id="@+id/textViewR"

android:layout_width="wrap_content"

android:layout_height="wrap_content"

android:text="@string/r_text" />

<Button

android:id="@+id/buttonR"

android:layout_width="match_parent"

android:layout_height="wrap_content"

android:text="@string/r_button_text" />

</LinearLayout>

Napuhavanje prikaza aktivnosti: this.setContentView(R.layout.result_activity);

7. 11. 2012.

Page 10: Razvoj usluga i aplikacija za operacijski sustav AndroidSadržaj projekta Android aplikacije u Eclipse-u Mapa src – ovdje stavljamo cijeli programski kod Mapa res – ovdje stavljamo

Programski definiran prikaz aktivnosti

LinearLayout layout = new LinearLayout(this);

layout.setOrientation(LinearLayout.VERTICAL);

TextView textViewR = new TextView(this);

textViewR.setText(R.string.r_text);

textViewR.setLayoutParams(new

LinearLayout.LayoutParams(ViewGroup.LayoutParams.WRAP_CONTENT,

ViewGroup.LayoutParams.WRAP_CONTENT, 0.0F));

layout.addView(textViewR);

Button buttonR = new Button(this);

buttonR.setText(R.string.r_button_text);

buttonR.setLayoutParams(new

LinearLayout.LayoutParams(ViewGroup.LayoutParams.FILL_PARENT,

ViewGroup.LayoutParams.WRAP_CONTENT, 0.0F));

layout.addView(buttonR);

this.setContentView(layout);

7. 11. 2012.

Page 11: Razvoj usluga i aplikacija za operacijski sustav AndroidSadržaj projekta Android aplikacije u Eclipse-u Mapa src – ovdje stavljamo cijeli programski kod Mapa res – ovdje stavljamo

Aktivnost: Definiranje upravljanja kor. radnjama

Aplikacija treba pratiti i reagirati na korisničke radnje tj.

upravljati njima odabir iz izbornika, unos parametra, pritisak gumba

Potrebno je prepoznati korisničke radnje koje su bitne za

aplikacijsku logiku (npr. zahtijevaju ažuriranje ili promjenu

prikaza) od onih koje to nisu

Primjer: Prepoznavanje pritiska gumba

7. 11. 2012.

Button button = (Button) findViewById(R.id.button);

button.setOnClickListener(new View.OnClickListener() {

public void onClick(View v) {

}

});

Page 12: Razvoj usluga i aplikacija za operacijski sustav AndroidSadržaj projekta Android aplikacije u Eclipse-u Mapa src – ovdje stavljamo cijeli programski kod Mapa res – ovdje stavljamo

Aktivnost: Prosljeđivanje podataka modelu

7. 11. 2012.

Aplikacijska logika (model) je srž aplikacije

Prihvaća, prilagođava i prosljeđuje podatke

Mijenja prikaz

Koordinira aktivnosti

Primjer: eksplicitno pokretanje nove aktivnosti putem

namjere

Intent intent = new Intent(PresentActivity.this,

FutureActivity.class);

intent.putExtra("result", result);

startActivity(intent);

Page 13: Razvoj usluga i aplikacija za operacijski sustav AndroidSadržaj projekta Android aplikacije u Eclipse-u Mapa src – ovdje stavljamo cijeli programski kod Mapa res – ovdje stavljamo

Sadržaj predavanja

Kratki uvod u model Android aplikacija

Stvaranje jednostavne aplikacije od nule

Osnovni elementi korisničkog sučelja Kontrole unosa i događaji nad njima

Skočne poruke i dijalozi

Namjere

7. 11. 2012.

Page 14: Razvoj usluga i aplikacija za operacijski sustav AndroidSadržaj projekta Android aplikacije u Eclipse-u Mapa src – ovdje stavljamo cijeli programski kod Mapa res – ovdje stavljamo

Jednostavni kalkulator za množenje dva broja

Dvije aktivnosti Prva aktivnost: unos dva broja

Druga aktivnost: prikaz rezultata

7. 11. 2012.

Page 15: Razvoj usluga i aplikacija za operacijski sustav AndroidSadržaj projekta Android aplikacije u Eclipse-u Mapa src – ovdje stavljamo cijeli programski kod Mapa res – ovdje stavljamo

Tko što radi kod ove aplikacije?

Prikaz Aktivnost unosa brojeva

Aktivnost prikaza rezultata

Upravljanje Prepoznavanje korisničkog klika na gumbe

Dohvaćanje unesenih vrijednost brojeva

Model Obavljanje operacije nad brojevima

Mijenjanje prikaza

Pozivanje jedne aktivnosti iz druge

7. 11. 2012.

Page 16: Razvoj usluga i aplikacija za operacijski sustav AndroidSadržaj projekta Android aplikacije u Eclipse-u Mapa src – ovdje stavljamo cijeli programski kod Mapa res – ovdje stavljamo

Sadržaj predavanja

Kratki uvod u model Android aplikacija

Stvaranje jednostavne aplikacije od nule

Osnovni elementi korisničkog sučelja Kontrole unosa i događaji nad njima

Skočne poruke i dijalozi

Namjere

7. 11. 2012.

Page 17: Razvoj usluga i aplikacija za operacijski sustav AndroidSadržaj projekta Android aplikacije u Eclipse-u Mapa src – ovdje stavljamo cijeli programski kod Mapa res – ovdje stavljamo

Podjela elemenata korisničkog sučelja

Elementi prikaza (views) Objekti koji nešto prikazuje na zaslonu i s kojima korisnik može

biti u interakciji

Grupe elemenata prikaza (view groups) Objekti koji sadrže i vrše razmještaj elemenata prikaza (i drugih

grupa) po zaslonu

Aktivnosti predstavljaju prozor prikazan na zaslonu

Fragmenti enkapsuliraju dijelove korisničkog sučelja te

omogućavaju njihovo jednostavno ponovno korištenje Prilagodba različitim veličinama zaslona

7. 11. 2012.

Page 18: Razvoj usluga i aplikacija za operacijski sustav AndroidSadržaj projekta Android aplikacije u Eclipse-u Mapa src – ovdje stavljamo cijeli programski kod Mapa res – ovdje stavljamo

Prikaz korisničkog sučelja

Vrši se dodjelom pogleda (najčešće razmještaja ili

fragmenata) aktivnosti

Pri tome su grupe pogleda najčešće hijerarhijski

organizirane

Korijenski element može biti samo jedan

7. 11. 2012.

Page 20: Razvoj usluga i aplikacija za operacijski sustav AndroidSadržaj projekta Android aplikacije u Eclipse-u Mapa src – ovdje stavljamo cijeli programski kod Mapa res – ovdje stavljamo

Savjet: isključiti automatsko formatiranje XML-a

Višegodišnji bug u Eclipse-u

7. 11. 2012.

Page 21: Razvoj usluga i aplikacija za operacijski sustav AndroidSadržaj projekta Android aplikacije u Eclipse-u Mapa src – ovdje stavljamo cijeli programski kod Mapa res – ovdje stavljamo

Sadržaj predavanja

Kratki uvod u model Android aplikacija

Stvaranje jednostavne aplikacije od nule

Osnovni elementi korisničkog sučelja Kontrole unosa i događaji nad njima

Skočne poruke i dijalozi

Namjere

7. 11. 2012.

Page 22: Razvoj usluga i aplikacija za operacijski sustav AndroidSadržaj projekta Android aplikacije u Eclipse-u Mapa src – ovdje stavljamo cijeli programski kod Mapa res – ovdje stavljamo

Kontrole unosa

Ključni interaktivni elemente korisničkog sučelja Gumbi (Buttons)

Tekstualna polja (Text Fields)

Kvačice (Checkboxes)

Izbornici (Radio Buttons)

Prekidači (Toggle Buttons, Switches)

Padajući izbornici (Spinners)

Gumbi za odabir vremena i datuma (Pickers)

7. 11. 2012.

Page 23: Razvoj usluga i aplikacija za operacijski sustav AndroidSadržaj projekta Android aplikacije u Eclipse-u Mapa src – ovdje stavljamo cijeli programski kod Mapa res – ovdje stavljamo

Događaji nad kontrolama unosa

View.OnClickListener.onClick() Poziva se pri klikanju na element prikaza ili prilikom njegova

fokusiranja i pritiskanja tipke odabira (enter key) View.OnLongClickListener.onLongClick()

Poziva se prilikom klikanja i držanja elementa prikaza ili prilikom njegova fokusiranja i dugog pritiskanja tipke odabira

View.OnFocusChangeListener.onFocusChange() Poziva se prilikom fokusiranja na element prikaza ili micanja

fokusa s njega View.OnKeyListener.onKey()

Poziva se prilikom pritiskanja neke hardverske tipke za vrijeme dok je element prikaza fokusiran

View.OnTouchListener.onTouch() Poziva se prilikom pritiskanja, puštanja ili bilo kakva dodira

elementa prikaza

7. 11. 2012.

Page 24: Razvoj usluga i aplikacija za operacijski sustav AndroidSadržaj projekta Android aplikacije u Eclipse-u Mapa src – ovdje stavljamo cijeli programski kod Mapa res – ovdje stavljamo

Načini definiranja slušača događaja

Da bi se određeni događaj mogao uhvatiti potrebno je

definirati njegovog slušača (Listener)

Ovo se može napraviti na dva načina Programski u klasi Aktivnosti i

• Za svaki element prikaza se može definirati vlastiti slušač

putem layout-a (XML datoteka) • Jedan slušač po vrsti događaja, isti za sve elemente prikaza

• Zbog toga se svaki put treba provjeravati o kojem elementu prikaza se radi

7. 11. 2012.

Page 25: Razvoj usluga i aplikacija za operacijski sustav AndroidSadržaj projekta Android aplikacije u Eclipse-u Mapa src – ovdje stavljamo cijeli programski kod Mapa res – ovdje stavljamo

Gumb (Button)

Treba definirati izgled i tekst <Button android:id="@+id/button" android:layout_width="fill_parent" android:layout_height="wrap_content" android:text="@string/button_text" />

Treba definirati što se događa prilikom klikanja Button button = (Button) findViewById(R.id.button);

button.setOnClickListener(new View.OnClickListener() { public void onClick(View v) { …

} });

7. 11. 2012.

Page 26: Razvoj usluga i aplikacija za operacijski sustav AndroidSadržaj projekta Android aplikacije u Eclipse-u Mapa src – ovdje stavljamo cijeli programski kod Mapa res – ovdje stavljamo

Tekstualno polje (Text Field)

Treba definirati izgled i početni tekst <EditText android:id="@+id/editText" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_weight="1"

android:ems="10" android:inputType="number" />

Treba definirati čitanje sadržaja prilikom klikanja na gumb EditText editText = (EditText) findViewById(R.id.editText); String input = editTextA.getText().toString();

7. 11. 2012.

Page 27: Razvoj usluga i aplikacija za operacijski sustav AndroidSadržaj projekta Android aplikacije u Eclipse-u Mapa src – ovdje stavljamo cijeli programski kod Mapa res – ovdje stavljamo

Kvačica (Checkbox)

Treba definirati tekst <CheckBox android:id="@+id/checkBox" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="@string/checkbox_text" />

Treba definirati čitanje odabira prilikom klikanja na gumb CheckBox checkBox =

(CheckBox) findViewById(R.id.checkBox); boolean checked = checkBox.isChecked();

7. 11. 2012.

Page 28: Razvoj usluga i aplikacija za operacijski sustav AndroidSadržaj projekta Android aplikacije u Eclipse-u Mapa src – ovdje stavljamo cijeli programski kod Mapa res – ovdje stavljamo

Izbornik (Radio Button)

Treba definirati ponuđene vrijednosti i orijentaciju izbornika <RadioGroup android:layout_width="fill_parent" android:layout_height="wrap_content" android:orientation="vertical"> <RadioButton android:id="@+id/rb1"

android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="@string/rb1_text"/>

<RadioButton android:id="@+id/rb2" android:layout_width="wrap_content" android:layout_height="wrap_content"

android:text="@string/rb2_text"/> </RadioGroup>

Treba definirati čitanje odabira prilikom klikanja na gumb RadioButton rb = (RadioButton) findViewById(R.id.rb); boolean checked = rb.isChecked();

7. 11. 2012.

Page 29: Razvoj usluga i aplikacija za operacijski sustav AndroidSadržaj projekta Android aplikacije u Eclipse-u Mapa src – ovdje stavljamo cijeli programski kod Mapa res – ovdje stavljamo

Prekidač (Toggle Button, Switch)

Treba definirati tekst i vrijednosti za on i off <ToggleButton android:id="@+id/tb" android:layout_width="wrap_content" android:layout_height="wrap_content" android:textOn="@string/tb_on_text" android:textOff="@string/tb_off_text"/>

Treba definirati čitanje odabira prilikom klikanja na gumb

ToggleButton tb = (ToggleButton) findViewById(R.id.tb); boolean on = tb.isChecked(); String tbText; if (on) { tbText = tb.getTextOn().toString(); } else { tbText = tb.getTextOn().toString(); }

7. 11. 2012.

Page 30: Razvoj usluga i aplikacija za operacijski sustav AndroidSadržaj projekta Android aplikacije u Eclipse-u Mapa src – ovdje stavljamo cijeli programski kod Mapa res – ovdje stavljamo

Padajući izbornik (Spinner)

Treba ga dodati u layout <Spinner android:id="@+id/spinner1" android:layout_width="match_parent" android:layout_height="wrap_content" android:entries="@array/spinner_choices" android:prompt="@string/spinner_text" />

Treba definirati naslov i vrijednosti u strings.xml <string name="spinner_text">Select one</string> <string-array name="spinner_choices"> <item>First</item> <item>Second</item> <item>Third</item> </string-array>

Treba definirati čitanje odabira prilikom klika na gumb Spinner spinner = (Spinner)findViewById(R.id.spinner); String selected = spinner.getSelectedItem().toString();

7. 11. 2012.

Page 31: Razvoj usluga i aplikacija za operacijski sustav AndroidSadržaj projekta Android aplikacije u Eclipse-u Mapa src – ovdje stavljamo cijeli programski kod Mapa res – ovdje stavljamo

Sadržaj predavanja

Kratki uvod u model Android aplikacija

Stvaranje jednostavne aplikacije od nule

Osnovni elementi korisničkog sučelja Kontrole unosa i događaji nad njima

Skočne poruke i dijalozi

Namjere

7. 11. 2012.

Page 32: Razvoj usluga i aplikacija za operacijski sustav AndroidSadržaj projekta Android aplikacije u Eclipse-u Mapa src – ovdje stavljamo cijeli programski kod Mapa res – ovdje stavljamo

Skočna poruka (Toast)

Vrlo jednostavno se definira

Potrebno je definirati tekst i trajanje Context context = getApplicationContext(); CharSequence text = "Voilà"; int duration = Toast.LENGTH_SHORT; Toast toast = Toast.makeText(context, text, duration); toast.show();

7. 11. 2012.

Page 33: Razvoj usluga i aplikacija za operacijski sustav AndroidSadržaj projekta Android aplikacije u Eclipse-u Mapa src – ovdje stavljamo cijeli programski kod Mapa res – ovdje stavljamo

Dijalog (Dialog)

AlertDialog,DatePickerDialog i TimePickerDialog

Potrebno je koristiti poseban Builder

AlertDialog.Builder adb = new AlertDialog.Builder(this);

adb.setTitle("Are you sure you want to exit?");

adb.setMessage("You will lose all unsaved data");

adb.setCancelable(false);

adb.setPositiveButton("Yes", new DialogInterface.OnClickListener() {

public void onClick(DialogInterface dialog, int id) {

CurrentActivity.this.finish();} });

adb.setNegativeButton("No", new DialogInterface.OnClickListener() {

public void onClick(DialogInterface dialog, int id) {

dialog.cancel(); } });

adb.show();

7. 11. 2012.

Page 34: Razvoj usluga i aplikacija za operacijski sustav AndroidSadržaj projekta Android aplikacije u Eclipse-u Mapa src – ovdje stavljamo cijeli programski kod Mapa res – ovdje stavljamo

Sadržaj predavanja

Kratki uvod u model Android aplikacija

Stvaranje jednostavne aplikacije od nule

Osnovni elementi korisničkog sučelja Kontrole unosa i događaji nad njima

Skočne poruke i dijalozi

Namjere

7. 11. 2012.

Page 35: Razvoj usluga i aplikacija za operacijski sustav AndroidSadržaj projekta Android aplikacije u Eclipse-u Mapa src – ovdje stavljamo cijeli programski kod Mapa res – ovdje stavljamo

Stog aktivnosti

Nove aktivnosti se mogu pokrenuti implicitno ili eksplicitno

Trenutno aktivna aktivnost je na vrhu stoga

Kad se ona zatvori (ili pritisne tipka nazad) vraćamo se na

prethodno aktivnu aktivnost – ona je sada na vrhu stoga

7. 11. 2012.

Page 36: Razvoj usluga i aplikacija za operacijski sustav AndroidSadržaj projekta Android aplikacije u Eclipse-u Mapa src – ovdje stavljamo cijeli programski kod Mapa res – ovdje stavljamo

Eksplicitno pokretanje nove aktivnosti

Koristi se kada znamo koju aktivnost želimo sljedeću

aktivirati i prikazati na zaslonu

Stvaranje, startanje i ponovno pokretanje nove aktivnosti: Intent intent = new Intent(MyActivity.this, MyOtherActivity.class);

startActivity(intent);

Eksplicitnim pokretanjem aktivnost se stavlja na vrh stoga

aktivnosti, dotad aktivna aktivnost ostaje na stogu

Pozivanjem metode finish() ili pritiskanjem tipke back,

aktivnost se zatvara i miče sa stoga

7. 11. 2012.

Page 37: Razvoj usluga i aplikacija za operacijski sustav AndroidSadržaj projekta Android aplikacije u Eclipse-u Mapa src – ovdje stavljamo cijeli programski kod Mapa res – ovdje stavljamo

Implicitno pokretanje nove aktivnosti

Koristi se kada znamo koju zadaću želimo sljedeću obaviti,

ali nam je nepoznata aktivnost koja to omogućava

Na ovaj način anonimne komponente aplikacija mogu nuditi

obavljati zadaće drugim dijelovima aplikacija

Primjer: implicitno pokretanje pozivanja tel. broja Intent intent =

new Intent(Intent.ACTION_DIAL, Uri.parse(“tel:6129-754”));

startActivity(intent);

7. 11. 2012.

Page 38: Razvoj usluga i aplikacija za operacijski sustav AndroidSadržaj projekta Android aplikacije u Eclipse-u Mapa src – ovdje stavljamo cijeli programski kod Mapa res – ovdje stavljamo

Kako proslijediti podatke novopokrenutoj aktivnosti?

Primitivni tipovi podataka Za prosljeđivanje privremenih podataka preporuča se metoda

Intent.putExtras()

Ukoliko se primitivni tipovi podataka trebaju pohraniti trajno, preporuča se mehanizam Preferences

Složeni privremeni objekti Za prosljeđivanje složenih privremenih objekata se preporuča se jedan

od sljedećih pristupa: • Singleton klasa • Javni (public) atribut ili metoda • HashMap referenci objekata – aktivnosti se prosljeđuje ID objekta putem

metode Intent.putExtras()

Perzistentni (trajni) objekti Za prosljeđivanje trajnih objekata se preporuča se jedan od sljedećih

pristupa: • Application Preferences

• datoteke • Content Providers

• SQLite DB

7. 11. 2012.

Page 39: Razvoj usluga i aplikacija za operacijski sustav AndroidSadržaj projekta Android aplikacije u Eclipse-u Mapa src – ovdje stavljamo cijeli programski kod Mapa res – ovdje stavljamo

Primjer prosljeđivanja primitivnih tipova podataka

Na strani aktivnosti pošiljatelja Float passed = 5.0f;

Intent intent = new Intent(InputActivity.this,

OutputActivity.class);

intent.putExtra("passed", passed);

startActivity(intent);

Na strani aktivnosti primatelja

Bundle extras = getIntent().getExtras();

if (extras != null) {

float passed = extras.getFloat(„passed");

//do something with the passed data

}

7. 11. 2012.

Page 40: Razvoj usluga i aplikacija za operacijski sustav AndroidSadržaj projekta Android aplikacije u Eclipse-u Mapa src – ovdje stavljamo cijeli programski kod Mapa res – ovdje stavljamo

Kako zatražiti podatke od novopokrenute aktivnosti?

Eksplicitno pokretanje aktivnosti koja vraća rezultat private static final int REQUEST_CODE = 1; Intent intent = new Intent(this, MyOtherActivity.class); startActivityForResult(intent, REQUEST_CODE);

Implicitno pokretanje aktivnosti koja vraća rezultat private static final int REQUEST_CODE = 2; Uri uri = Uri.parse(“content://contacts/people”);

Intent intent = new Intent(Intent.ACTION_PICK, uri); startActivityForResult(intent, REQUEST_CODE);

Kada aktivnost završi kod zahtjeva (REQUEST_CODE) će biti

vraćen u metodi onActivityResult()

7. 11. 2012.

Page 41: Razvoj usluga i aplikacija za operacijski sustav AndroidSadržaj projekta Android aplikacije u Eclipse-u Mapa src – ovdje stavljamo cijeli programski kod Mapa res – ovdje stavljamo

Kako vratiti podatke pri povratku na prethodnu akt.?

Potrebno je pozvati metodu setResult prije povratka na

prethodnu aktivnost Ova metoda prima 2 argumenta:

• Kod rezultata (RESULT_CODE) - najčešće Activity.RESULT_OK ili

Activity.RESULT_CANCELED i

• Podatke koji se vraćaju u obliku namjere (Intent)

Namjera najčešće sadrži URI podataka i kolekciju dodatnih

prim. podataka dodanih metodom Intent.putExtras() long selected_item_id = listView.getSelectedItemId();

Uri selectedItem = Uri.parse(“content://items/” +

selected_item_id);

Intent result = new Intent(Intent.ACTION_PICK, selectedItem);

setResult(RESULT_OK, result);

finish();

7. 11. 2012.

Page 42: Razvoj usluga i aplikacija za operacijski sustav AndroidSadržaj projekta Android aplikacije u Eclipse-u Mapa src – ovdje stavljamo cijeli programski kod Mapa res – ovdje stavljamo

Kako doći do podataka koje je vratila pret. aktivnost?

Pri povratku iz aktivnosti koja vraća rezultat poziva se metoda onActivityResult() aktivnosti koja ju prethodno pozvala

Ova metoda ima 3 argumenta: Kod zahtjeva proslijeđen pri pozivu startActivityForResult() Kod rezultata postavljen pri pozivu metode setResult Namjeru (Intent) u kojoj se nalaze podaci protected void onActivityResult(int requestCode, int resultCode, Intent data) { // Check which request we're responding to if (requestCode == PICK_CONTACT_REQUEST) { // Make sure the request was successful if (resultCode == RESULT_OK) { // The user picked a contact. // The Intent's data Uri identifies which contact was selected. // Do something with the contact here (bigger example below) } } }

7. 11. 2012.