it vezbe android

108
Informacione tehnolgije Informacione tehnolgije Android aplikacije

Upload: abrabis

Post on 10-Feb-2016

48 views

Category:

Documents


4 download

DESCRIPTION

android aplikacije i kako ih napraviti. Rad u aplikaciji android studio

TRANSCRIPT

Page 1: It Vezbe Android

Informacione tehnolgijeInformacione tehnolgijeAndroid aplikacije

Page 2: It Vezbe Android

Informacione tehnolgijeInformacione tehnolgijeAndroid SDK. AVD, Hello World aplikacija

Page 3: It Vezbe Android

Android SDK• Prvi i najvažniji softver koji je potrebno preuzeti je

Android SDK• On sadrži mnoštvo korisnih elemenata: debugger,

biblioteke, emulator, dokumentaciju…biblioteke, emulator, dokumentaciju…• Android SDK koristi Java Development Kit (JDK), pa

ukoliko JDK ne postoji na računaru, potrebno ga je preuzeti sa lokacije http://www.oracle.com/technetwork/java/javase/downloads/index.html i instalirati

• Android SDK se može preuzeti sa http://developer.android.com/sdk/index.html

• Nakon preuzimanja dobija se zip fajl koga je potrebno raspakovati na lokalni disk.

Page 4: It Vezbe Android

Android SDK Manager• Dostupan je na Window>Android SDK Manager• Upravlja različitim verzijama Android SDK-a, preko njega se

vrši update

Page 5: It Vezbe Android

Android Virtuelni ureñaji (AVD, Android Virtual Device)

• Dostupan je na Window>Android Virtual Device Manager

• Ovo je instanca emulatora koja omogućava modeliranje realnog uređaja

• Može se napraviti veći broj ovih virtualnih uređaja, koji nam omogućavaju simulaciju rada aplikacija na uređajima različitih karakteristika

Page 6: It Vezbe Android

Kreiranje AVD

• Potrebno je kliknuti na dugme New, datim ime uređaju, izabrati tip uređaju, izabrati tip uređaja, i izvršiti ostala podešavanja, i kliknuti OK kako bi se napravio novi AVD.

Page 7: It Vezbe Android

Pokretanje AVD• U Android Virtual Device Manager selektovati

virtuelni uređaj, kliknuti na Start… i zatim na Launch

Page 8: It Vezbe Android

AVD

• Virtuelni uređaj je pokrenut u skladu sa skladu sa podešavanjima koje smo napravili

Page 9: It Vezbe Android

Hello World aplikacija

• Daje se postupak pravljanja jedne Android aplikacije• Otići na File>New>Android Application Project

▫ Application Name: HelloWorld▫ Application Name: HelloWorld▫ Project Name: HelloWorld▫ Package Name: zr.vts.it

• Izabrati sve podrazumevane opcije do kraja rada čarobnjaka

• Na narednim slikama je ilustrovan izgled IDE projekta HelloWorld, i postupak pokretanja ove aplikacije

Page 10: It Vezbe Android

IDE – Hello World projekat

Page 11: It Vezbe Android

Pokretanje HelloWorld aplikacije

Page 12: It Vezbe Android

Od Hello World do Pozdrav Svete• Napraviti izmenu kao na slici i ponovo pokrenuti

AVD

Page 13: It Vezbe Android

Anatomija Android aplikacije• Postoje sledeći folderi:

▫ src – Sadrži .java izvorne datoteke, u ovom slučaju MainActivity.java koja sadrži kod za funkcionisanje aplikacije

▫ gen – Sadrži R.java datoteku koja referencira sve resurse ▫ gen – Sadrži R.java datoteku koja referencira sve resurse projekta. Ne treba je modifikovati.

▫ Android 4.2.2. – sadrži android.jar koja sadrži sve biblioteke klasa neophodne za jednu Android aplikaciju

▫ assets – sredstva koja koristi aplikacija▫ bin – ovde se generiše između ostalih .apk fajl koja

predstavlja instalacionu verziju aplikacije▫ res – sadrži sve resurse koji se koriste u aplikaciji▫ AndroidManifest.xml – manifest datoteke, koji sadrži

privilegije, filtre… koji važe za aplikaciju

Page 14: It Vezbe Android

AndroidManifest.xml• U ovoj datotecu su definisani između ostalog:

▫ Paket aplikacije: package="zr.vts.it“▫ Kod verzije aplikacije: android:versionCode="1"▫ Kod verzije aplikacije: android:versionCode="1"▫ Naziv verzije aplikacije: android:versionName="1.0"▫ Minimalna Android verzija:

android:minSdkVersion="8“▫ Ikonica: android:icon="@drawable/ic_launcher“▫ Naziv aplikacije: android:label="@string/app_name"

Page 15: It Vezbe Android

Informacione tehnolgijeInformacione tehnolgijeDizajniranje korisničkog interfejsapomoću pogleda

Page 16: It Vezbe Android

Pogledi

• Anstdroid pruža mogućnost za rad sa različitim pogledima, gde između ostalog spadaju:▫ Basic pogledi – TextView, EditText i Button… ▫ Basic pogledi – TextView, EditText i Button…

Prikaz i unos teksta i dugme…▫ Picker pogledi – TimePicker, DatePicker.

Omogućavaju selektovanje stavki iz liste.▫ List pogledi – ListView, SpinnerView. Prikaz dužih

lista stavki.

Page 17: It Vezbe Android

Osnovni pogledi• Osnovni pogledi se jednostavno koriste pri

projektovanju korisničkog interfejsa Androidaplikacije:▫ TextView – prikaz teksta▫ TextView – prikaz teksta▫ EditText - unos ili izmena teksta▫ Button – dugme, može se pritisnuti▫ ImageButton – dugme koje ima i sliku▫ CheckBox – taster sa 2 stanja: uključeno i isključeno▫ ToggleButton – slično kao CheckBox ali drugačiji

prikaz ▫ RadioButton▫ RadioGroup

Page 18: It Vezbe Android

TextView

• TextView se koristi pri prikazivanju teksta korisnicima

• Osobina android:text služi za podešavanje teksta• Osobina android:text služi za podešavanje teksta• Primer:<TextView

android:id="@+id/txtTekst"android:layout_width="fill_parent"android:layout_height="wrap_content"android:text= "Ovo je TextView" />

Page 19: It Vezbe Android

EditText

• Omogućava editovanje teksta• android:id omogućava jedinstvenu identifikaciju

ove komponenteove komponente• Primer:<EditText android:id="@+id/txtName"

android:layout_width="fill_parent" android:layout_height="wrap_content" />

Page 20: It Vezbe Android

Button• Predstavlja taster koji je moguće pritisnuti.• Vrednost osobine android:onClick je naziv funkcije koja se izvršava

kada se klikne na dugme.• Primer:<Button android:id="@+id/btnSave"<Button android:id="@+id/btnSave"

android:layout_width="fill_parent"android:layout_height="wrap_content"android:text="Snimi" android:onClick="btnSaved_clicked"/>

• U tom slučaju potrebno je obraditi klik događaj u odgovarajućem java dokumentu.

• Primer:public void btnSaved_clicked(View view){Toast.makeText(getBaseContext(), "Snimanje...",

Toast.LENGTH_LONG).show(); }

Page 21: It Vezbe Android

ImageButton

• Slično kao u kod Button, ali postoji slika• Osobina android:src omogućava izbor slike• Primer:• Primer:<ImageButton android:id="@+id/btnImg1"

android:layout_width="fill_parent"android:layout_height="wrap_content"android:src="@drawable/ic_launcher" />

Page 22: It Vezbe Android

CheckBox

• Tip tastera koji sadrži dva stanja: selektovano i deselektovano

• Primer:• Primer:<CheckBox android:id="@+id/chkAutosave"

android:layout_width="fill_parent"android:layout_height="wrap_content"android:text="Autosave" />

Page 23: It Vezbe Android

ToggleButton

• Prikazuje selektovana/deselektovana stanja korišćenjem svetlosnog indikatora

• Primer:• Primer:<ToggleButton android:id="@+id/toggle1"

android:layout_width="wrap_content"android:layout_height="wrap_content" />

Page 24: It Vezbe Android

Radio Group i Radio Button• RadioGroup grupiše više Radio Button-a, pri čemu samo jedan

Radio Button može biti seletovan u jednom momentu u okviru RadioGroup

• Primer:<RadioGroup android:id="@+id/rdbGp1"

android:layout_width="fill_parent"android:layout_height="wrap_content"android:layout_height="wrap_content"android:orientation="horizontal" ><RadioButton android:id="@+id/rdb1"

android:layout_width="wrap_content"android:layout_height="wrap_content"android:text="Opcija 1" />

<RadioButton android:id="@+id/rdb2"android:layout_width="wrap_content"android:layout_height="wrap_content"android:text="Opcija 2" />

</RadioGroup>

Page 25: It Vezbe Android

Osnovni pogledi

Page 26: It Vezbe Android

Picker pogledi

• Često se vrši selektovanje datuma i vremena u Android aplikacijama. Za ovu namenu koriste se:se:▫ TimePicker – selekcija vremena▫ DatePicker – selekcija datuma

Page 27: It Vezbe Android

TimePicker pogled

• TimePicker omogućava selekciju vremena.• Primer:<TimePicker android:id="@+id/timePicker1"<TimePicker android:id="@+id/timePicker1"

android:layout_width="wrap_content"android:layout_height="wrap_content" />

Page 28: It Vezbe Android

Kako videti trenutno vreme? Unetinavedeni kod u odgovarajući Java fajl

package vts.zr.vts_it_vezbe;

import android.app.Activity;import android.os.Bundle;import android.view.View;import android.widget.TimePicker;import android.widget.Toast;import android.widget.Toast;

public class DateTimePicker extends Activity {TimePicker timePicker;

@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.datetimepicker);

timePicker = (TimePicker)findViewById(R.id.timePicker1);

timePicker.setIs24HourView(true);

}public void onClick(View view){Toast.makeText(getBaseContext(), “Vreme: "+ timePicker.getCurrentHour() +":" + timePicker.getCurrentMinute(), Toast.LENGTH_LONG).show();}}

Page 29: It Vezbe Android

DatePicker pogled• DatePicker pogled omogućava selekciju datuma• Primer:<DatePicker android:id="@+id/datePicker"

android:layout_width="wrap_content"android:layout_height="wrap_content" />android:layout_height="wrap_content" />

Page 30: It Vezbe Android

Kako videti trenutni datum?package vts.zr.vts_it_vezbe;import android.app.Activity;import android.os.Bundle;import android.view.View;import android.widget.DatePicker;import android.widget.Toast;public class DateTimePicker extends Activity {DatePicker datePicker; DatePicker datePicker; @Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.datetimepicker);datePicker = (DatePicker)findViewById(R.id.datePicker1);}public void onClick(View view){Toast.makeText(getBaseContext(), "Datum:" + (datePicker.getMonth() +

1) +"/" + datePicker.getDayOfMonth() + /" + datePicker.getYear(),

Toast.LENGTH_LONG).show();}}

Page 31: It Vezbe Android

List pogledi

• List pogledi omogućavaju prikaz dužih lista stavki. Za ovu namenu koriste se:▫ ListView▫ ListView▫ SpinnerView

Page 32: It Vezbe Android

ListView pogled

• ListView pogledomogućava rad sa dužim listama i dužim listama i selekciju stavki iz ove liste

• Primer:<ListView

android:id="@+id/android:list"

android:layout_width="wrap_content"

android:layout_height="wrap_content" />

Page 33: It Vezbe Android

ListView pogled – java kodpackage vts.zr.vts_it_vezbe;

import android.app.ListActivity;import android.os.Bundle;import android.view.View;import android.widget.ArrayAdapter;import android.widget.ListView;import android.widget.Toast;

public class ListViewPicker extends ListActivity {String[] studProgrami = {String[] studProgrami = {

"Inženjerski menadžment","Tehnološko inženjerstvo","Mašinsko inženjerstvo","Tekstilna konfekcija i dizajn"

};protected void onCreate(Bundle savedInstanceState) {

super.onCreate(savedInstanceState);setListAdapter(new ArrayAdapter<String>(this, android.R.layout.simple_list_item_1,

studProgrami));}

public void onListItemClick(ListView parent, View v, int position, long id){

Toast.makeText(this, "Vaš izbor: " + studProgrami[position], Toast.LENGTH_SHORT).show();}

}

Page 34: It Vezbe Android

SpinnerView pogled

• Spinner View pogledomogućava rad sa dužim listama i dužim listama i selekciju stavki iz ove liste• Primer:<Spinner

android:id="@+id/spinner1"android:layout_width="wrap_content"android:layout_height="wrap_content"android:drawSelectorOnTop="true" />

Page 35: It Vezbe Android

SpinnerView pogled – java kodpackage vts.zr.vts_it_vezbe;

import android.app.Activity;import android.os.Bundle;import android.widget.ArrayAdapter;import android.widget.Spinner;

public class SpinnerViewPicker extends Activity{

String[] studProgrami = {"Inženjerski menadžment","Inženjerski menadžment","Tehnološko inženjerstvo","Mašinsko inženjerstvo","Tekstilna konfekcija i dizajn"

};

protected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.spinnerviewpicker);

Spinner s1 = (Spinner)findViewById(R.id.spinner1);ArrayAdapter<String> adapter = new ArrayAdapter<String>(this,

android.R.layout.simple_list_item_single_choice, studProgrami);s1.setAdapter(adapter);

}}

Page 36: It Vezbe Android

Informacione tehnolgijeInformacione tehnolgijeAktivnosti i namere

Page 37: It Vezbe Android

Aktivnost• Aktivnost je prozor koji sadrži korisnički interfejs u

aplikaciji• Glavni cilj aktivnosti je omogućavanje interakcije sa

korisnikomkorisnikom• Od trenutka kada se aktivnost prikaže na ekranu, do

njenog skrivanja, prolazi se kroz veći broj faza u njenom “životnom ciklusu”

• Razumevanje ovog životnog ciklusa je neophodno za obezbeđenje ispravnog funkcionisanja aplikacije

• U nastavku se opisuje postupak kreiranja nove aktivnosti.

Page 38: It Vezbe Android

activity101activity.xml• U direktorijumu res/layout treba napraviti fajl

activity101activity.xml. U nastavku se daje njegovsadržaj:

<LinearLayoutxmlns:android="http://schemas.android.com/apk/res/android"xmlns:tools="http://schemas.android.com/tools"xmlns:tools="http://schemas.android.com/tools"android:layout_width="match_parent"android:layout_height="match_parent"android:orientation="vertical"tools:context=".Activity101Activity" >

<TextViewandroid:id="@+id/textView1"android:layout_width="fill_parent"android:layout_height="wrap_content"android:text="@string/hello_world" />

</LinearLayout>

Page 39: It Vezbe Android

Razumevanje aktivnosti• Da bi se stvorila nova aktivnost neophodno je kreiranje Java klase koja

nasleđuje Activity baznu klasu. Primer:

package vts.zr.vts_it_vezbe;import android.app.Activity;import android.app.Activity;import android.os.Bundle;public class Activity101Activity extends Activity {

protected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity101activity);

}}• extends Activity znači da će posmatrana klasa biti aktivnost• R.layout.activity101activity ukazuje na konkretnu komponentu

korisničkog interfejsa (xml fajl koji je naveden u prethodnom slajdu)

Page 40: It Vezbe Android

Deklaracija u AndroidManifest.xml• Svaka aktivnost koja se dodaje mora biti deklarisana u fajlu AndroidManifest.xml. Primer:<?xml version="1.0" encoding="utf-8"?><manifest xmlns:android="http://schemas.android.com/apk/res/android"

package="vts.zr.vts_it_vezbe"android:versionCode="1"android:versionName="1.0" ><uses-sdk

android:minSdkVersion="8” /><application

android:allowBackup="true"android:icon="@drawable/ic_launcher"android:label="@string/app_name” > <activity<activity

android:name="vts.zr.vts_it_vezbe.MainActivity"android:label="@string/app_name" ><intent-filter>

<action android:name="android.intent.action.MAIN" /><category android:name="android.intent.category.LAUNCHER" />

</intent-filter></activity><activity

android:name=".Activity101Activity"

android:label="@string/app_name" >

<intent-filter>

<action android:name="android.intent.action.ACTIVITY101ACTIVITY" />

<category android:name="android.intent.category.DEFAULT" />

</intent-filter>

</activity>

</application></manifest>

Page 41: It Vezbe Android

• U aktivnosti postoji više događaja koji pokrivaju životni ciklus aktivnosti:▫ onCreate() – poziva se pri

prvom definisanju aktivnosti▫ OnStart() – poziva se kada

aktivnost postane vidljiva korisniku

▫ onResume() – poziva se kada korisnika započne interakciju

Životni ciklus aktivnosti

korisnika započne interakciju▫ onStop() - poziva se kada se

aktivnost privremeno zaustavi

▫ onDestroy() - poziva se pre nego što se aktivnost ukloni sa sistema

▫ onRestart() - poziva se kada se aktivnost prvo zaustavi a zatim ponovo pokrene

Page 42: It Vezbe Android

Životni ciklus aktivnosti - Primerpackage vts.zr.vts_it_vezbe;

import android.app.Activity;import android.os.Bundle;import android.util.Log;

public class Activity101Activity extends Activity {

protected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity101activity);

}

public void onStart(){

super.onStart();Log.d("LC", "In the onStart() event");

}}

Page 43: It Vezbe Android

Način funkcionisanja

• Kada se aktivnost startuje uvek se izvršavaju događaju onStart() i onResume()

• onCreate() - za kreiranje i instanciranje objekata • onCreate() - za kreiranje i instanciranje objekata koji se koriste u aktivnosti

• onResume() – za startovanje onih radnji koje su potrebne kada je aktivnost u prvom planu

• onPause() - za zaustavljanje radnji kada aktivnost nije u prvom planu

• onDestroy() – za oslobađanja resursa koji nisu potrebni kada aktivnost biva uklanjana

Page 44: It Vezbe Android

Namere (Intent)• Ovo je jedan od jedinstvenih Android koncepata• Namera omogućava da različitim aktivnostima iz

različitih aplikacija da funkcionišu zajedno, pri čemu je obezbeđeno da se zadaci izvršavaju kao da su je obezbeđeno da se zadaci izvršavaju kao da su realizovani i jedinstvenoj aplikaciji

• Kada želimo da sa jedne aktivnosti pređemo na drugu aktivnost koristimo namere

• Mogu se izvršavati i ograđene aplikacije poput▫ Browser▫ Phone▫ Maps…

Page 45: It Vezbe Android

Kako se koriste namere• Android omogućava aplikacija poziva i svoje

aktivnosti ali i aktivnosti drugih aplikacija.• Primer pozivanja aktivnosti korišćenjem namere:public void onKlik(View view){public void onKlik(View view){startActivity(new Intent(“ime.paketa. DrugaAktivnost”));}• Ukoliko je pozivana aktivnost u istom projektu može

se korisiti i sledeći oblik:public void onKlik(View view){startActivity(new Intent(this, DrugaAktivnost.class));}

Page 46: It Vezbe Android

Deklaracija u AndroidManifest.xml• Druga aktivnost se mora dodati i u

AndroidManifest.xml. Primer:<activity

android:name=".Activity101Activity"android:label="@string/app_name" >android:label="@string/app_name" ><intent-filter>

<action android:name="android.intent.action.ACTIVITY101ACTIVITY" /><category android:name="android.intent.category.LAUNCHER" />

</intent-filter></activity>

<activityandroid:name=". DrugaAktivnost "android:label="@string/app_name" ><intent-filter>

<action android:name="android.intent.action. DRUGAAKTIVNOST " /><category android:name="android.intent.category.DEFAULT" />

</intent-filter></activity>

Page 47: It Vezbe Android

Vraćanje aktivnosti iz inicirane aktivnosti

• Ukoliko postoji potreba za vraćanjem neke vrednosti iz inicirane aktivnosti, potrebno je koristiti metod startActivityForResult() u prvoj koristiti metod startActivityForResult() u prvoj aktivnosti.

• Druga aktivnost obezbeđuje vrednost koja se vraća prvoj aktivnosti

Page 48: It Vezbe Android

Aktivnost koja poziva (i prikazuje vraćenu aktivnost)...int request_Code = 1;

public void onSecondActivity(View view){startActivityForResult(new Intent(this, SecondActivity.class), request_Code);request_Code);

}

public void onActivityResult(int requestCode, int ResultCode, Intent data){if(requestCode == request_Code){

if(ResultCode == RESULT_OK){Toast.makeText(getBaseContext(), data.getData().toString(), Toast.LENGTH_LONG).show();}

}}

...

Page 49: It Vezbe Android

Pozivana aktivnost(koja vraća rezultat)

…public void btnPotvrdi(View v){Intent data = new Intent();//Definisanje EditText pogledaEditText txtIme =

…<TextView

android:id="@+id/txtIme"android:layout_width="fill_parent"android:layout_height="wrap_content"android:text= "Unesite vaše ime:" />EditText txtIme =

(EditText)findViewById(R.id.etIme);//Definisanje podataka koji se vracajudata.setData(Uri.parse(txtIme.getText().toString()));setResult(RESULT_OK, data);//gasenje ove aktivnostifinish();}…

android:text= "Unesite vaše ime:" />

<EditText android:id="@+id/etIme"android:layout_width="fill_parent" android:layout_height="wrap_content" />

<Button android:id="@+id/btnImePotvrdi"android:layout_width="fill_parent"android:layout_height="wrap_content"android:text="Potvrdi" android:onClick="btnPotvrdi"/>

Page 50: It Vezbe Android

Slanje podataka u iniciranu aktivnost

• Moguće je da jedna aktivnost pošalje neki podatak u aktivnost koju je inicirala

• U ovoj situaciji je moguće koristiti Intend• U ovoj situaciji je moguće koristiti Intendobjekat

• Postoje dva načina za slanje podataka između aktivnost:▫ Kao ključ-vrednost par▫ Korišćenjem Bundle

Page 51: It Vezbe Android

Slanje podataka u iniciranu aktivnost - primerGlavna aktivnost

public void onThirdActivity(View view){Intent intent = new Intent(this, ThirdActivity.class);// I. Nacin key/valueintent.putExtra("poruka1", "Pozdrav iz glavne aktivnosti");// II. Način - bundleBundle extras = new Bundle();extras.putString("poruka2", "i još jedan pozdrav"); intent.putExtras(extras);startActivity(intent); // Poziv naredne aktivnosti}}

Pozivana aktivnost

protected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.thirdactivity);// Pristup nameri koja je prosledjena iz prethodne aktivnostiIntent intent = getIntent();// I. Nacin key/value ispisString p1 = intent.getStringExtra("poruka1"); Toast.makeText(getBaseContext(), p1, Toast.LENGTH_SHORT).show(); // II. Način - bundle ispisBundle bundle = intent.getExtras();String p2 = bundle.getString("poruka2");Toast.makeText(getBaseContext(), p2, Toast.LENGTH_SHORT).show(); }

Page 52: It Vezbe Android

Izvršavanje ugrañenih aplikacija na osnovu namera• Jedna od ključnih mogućnosti Android aplikacija je

korišćenje mogućnosti za izvršavanje aktivnosti iz nekih drugih aplikacija

• To znači da je moguće izvršavati različite ugrađene • To znači da je moguće izvršavati različite ugrađene aplikacije koje su raspoložive na konkretnom Android uređaju

• Na primer moguće je uspostaviti telefonski poziv, slati mejl ili posetiti web stranicu

• U AndroidManifest.xml je potrebno dodati potrebne dozvole, poput:

<uses-permission android:name="android.permission.CALL_PHONE"/><uses-permission android:name="android.permission.INTERNET"/>

Page 53: It Vezbe Android

Primeri:• Browser:public void onClickWebBrowser(View view) {

Intent i = new Intent("android.intent.action.VIEW");i.setData(Uri.parse("http://www.vts-zr.edu.rs"));i.setData(Uri.parse("http://www.vts-zr.edu.rs"));startActivity(i);

}

• Telefonski pozivpublic void onClickMakeCalls(View view) {

Intent i = new Intent(Intent.ACTION_CALL);i.setData(Uri.parse("tel:0038123123456"));startActivity(i);

}

Page 54: It Vezbe Android

Primeri• Elektronska pošta:public void onClickSendEmail(View view){String[] to = {"[email protected]"};

String[] cc = {"[email protected]"};sendEmail(to, cc, "Subject ide ovde", "Poštovani, \n");

}private void sendEmail(String[] emailAddresses, String[] carbonCopies,String subject, String message){{

Intent emailIntent = new Intent(Intent.ACTION_SEND);emailIntent.setData(Uri.parse("mailto:"));String[] to = emailAddresses;String[] cc = carbonCopies;emailIntent.putExtra(Intent.EXTRA_EMAIL, to);emailIntent.putExtra(Intent.EXTRA_CC, cc);emailIntent.putExtra(Intent.EXTRA_SUBJECT, subject);emailIntent.putExtra(Intent.EXTRA_TEXT, message);emailIntent.setType("message/rfc822");startActivity(Intent.createChooser(emailIntent, "Email"));

}

Page 55: It Vezbe Android

Informacione tehnolgijeInformacione tehnolgijeLayout

Page 56: It Vezbe Android

Uvod

• Osnovna jedinica Android aplikacije je aktivnost• Aktivnost omogućava prikazivanje korisničkog

interfejsa korišćenjem različitih elemenata interfejsa korišćenjem različitih elemenata poput tekstova, dugmadi…

• Korisnički interfejs se tipično definiše u okviru XML fajla (res/layout folder). Ovaj XML fajl se zatim učitava iz Java klase, na primer:protected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);}

Page 57: It Vezbe Android

Pogledi i grupe pogleda• Aktivnost sadrži:

▫ poglede – element koji ima svoj prikaz na ekranu, poput tastera ili polja sa tekstom i izvodi se iz bazne klase android.view.View

▫ grupe pogleda – obuhvata više pogleda i obezbeđuje da se oni uređuju prema određenom rasporedu ili načinu prikazivanjanačinu prikazivanja

• Android podržava sledeće grupe pogleda, koje se mogu kombinovati u okviru jedne aktivnosti:▫ LinearLayout▫ AbsoluteLayout▫ TableLayout▫ RelativeLayout▫ FrameLayout▫ ScroolView

Page 58: It Vezbe Android

Zajednički atributi pogleda i grupa pogleda

Atribut Opis

layout_width Definiše širinu za View ili ViewGroup

layout_height Definiše visinu za View ili ViewGroup

layout_marginTop Margina iznad View ili ViewGrouplayout_marginTop Margina iznad View ili ViewGroup

layout_marginBottom Margina ispodView ili ViewGroup

layout_marginLeft Margina levo od View ili ViewGroup

layout_marginRight Margina desno od View ili ViewGroup

layout_gravity Specifikacija kako se pozicionira View

layout_weight Specifikacija dodatnog prostora u rasporedu za View

layout_x X koordinata View ili ViewGroup elementa

layout_y Y koordinata View ili ViewGroup elementa

Page 59: It Vezbe Android

LinearLayout

• Uređuje poglede u jednu kolonu ili vrstu• Pogledi se slažu

▫ Vertikalno (android:orientation="vertical") ili ▫ Vertikalno (android:orientation="vertical") ili ▫ Horizontalno (android:orientation="horizontal")

Page 60: It Vezbe Android

Linearl.xml<LinearLayout

xmlns:android="http://schemas.android.com/apk/res/android"xmlns:tools="http://schemas.android.com/tools"android:layout_width="match_parent"android:layout_height="match_parent"android:layout_height="match_parent"android:orientation="vertical"tools:context=".linearl" >

<TextViewandroid:layout_width="wrap_content"android:layout_height="wrap_content"android:text="Pozdrav svete!" />

<Buttonandroid:layout_width="124dp"android:layout_height="wrap_content" android:text="Dugme" />

</LinearLayout>

Page 61: It Vezbe Android

AbsoluteLayout

• Omogućava tačno određivanje lokacije elemenata. Na primer:android:layout_x=“12px”android:layout_x=“12px”android:layout_x=“350px”

• Zbog određenih problema AbsoluteLayout sa ekranima visoke rezolucije se ne koristi od Android verzije 1.5, te je preporuka njegovo izbegavanje

Page 62: It Vezbe Android

TableLayout

• Grupiše elemente u vrste i kolone• <TableRow> se koristi za označavanje vrste u

posmatranoj tabeliposmatranoj tabeli• Svaka vrsta može da sadrži jedan ili više pogleda,

a svaki pogled formira ćeliju• Širina svake kolone je određena najvećom

širinom svake ćelije u koloni

Page 63: It Vezbe Android

tablel.xml<TableLayout xmlns:android="http://schemas.android.com/apk/res/android"

xmlns:tools="http://schemas.android.com/tools"android:layout_width="match_parent"android:layout_height="match_parent" ><TableRow>

<TextViewandroid:text="Ime:"android:width ="120dp"/>

<EditText<EditTextandroid:id="@+id/txtIme"android:width="200dp" />

</TableRow><TableRow>

<TextViewandroid:text="Šifra:"/>

<EditTextandroid:id="@+id/txtSifra" android:password="true" />

</TableRow></TableLayout>

Page 64: It Vezbe Android

RelativeLayout

• Ovaj raspored omogućava da se odredi način na koji se izvedeni element prikazuje u odnosu na osnovne elementeosnovne elemente

• Mogu se koristiti sledeći atributi:▫ android:layout_alignParentTop▫ android:layout_alignParentLeft▫ android:layout_alignLeft▫ android:layout_alignRight▫ android:layout_below▫ android:layout_centerHorizontal

Page 65: It Vezbe Android

relativel.xml<RelativeLayout

xmlns:android="http://schemas.android.com/apk/res/android"android:layout_width="fill_parent"android:layout_height="fill_parent" ><TextView

android:id="@+id/lblKomentari"android:layout_width="wrap_content"android:layout_height="wrap_content"android:text="Komentari"android:text="Komentari"android:layout_alignParentTop="true"android:layout_alignParentLeft="true" />

<EditTextandroid:id="@+id/txtComments"android:layout_width="wrap_content"android:layout_height="wrap_content"android:textSize="18sp"android:layout_toRightOf="@+id/lblKomentari"android:text="abc"android:layout_centerHorizontal="true" />

</RelativeLayout>

Page 66: It Vezbe Android

FrameLayout

• Ovaj raspored se može koristiti za prikazivanje jednog pogledajednog pogleda

• Pogledi koji se dodaju u FrameLayout se uvek postavljaju u odnosu na gornji levi ugao rasporeda

• Ukoliko se definiše još jedan pogled u ovom rasporedu dolazi do preklapanja

Page 67: It Vezbe Android

framel.xml<RelativeLayout

android:id="@+id/RLayout"android:layout_width="fill_parent"android:layout_height="fill_parent"xmlns:android="http://schemas.android.com/apk/res/android"><TextView

android:id="@+id/lblComments"android:layout_width="wrap_content"android:layout_height="wrap_content"android:text="Hello, Android!"android:layout_alignParentTop="true"android:layout_alignParentLeft="true"/>

<FrameLayout<FrameLayoutandroid:layout_width="wrap_content"android:layout_height="wrap_content"android:layout_alignLeft="@+id/lblComments"android:layout_below="@+id/lblComments"android:layout_centerHorizontal="true"><ImageView

android:src = "@drawable/ic_launcher"android:layout_width="wrap_content"android:layout_height="wrap_content" />

<Buttonandroid:layout_width="124dp"android:layout_height="wrap_content"android:text="Print Picture" />

</FrameLayout></RelativeLayout>

Page 68: It Vezbe Android

ScroolView

• Ovo je specijalni tip FrameLayoutprikaza

• Omogućava korisnicima da pristupaju • Omogućava korisnicima da pristupaju različitim pogledima u listi pogleda koji zauzimaju više prostora nego što to omogućava fizički displej

• ScroolView može da sadrži samo jedan izvedeni pogled ili grupu pogleda, koji je najčešće LinearLayout tipa

Page 69: It Vezbe Android

scrooll.xml<ScrollView

android:layout_width="fill_parent"android:layout_height="fill_parent"xmlns:android="http://schemas.android.com/apk/res/android" > <LinearLayout

android:layout_width="fill_parent"android:layout_height="wrap_content"android:orientation="vertical"android:focusable="true" android:focusableInTouchMode="true" >android:focusableInTouchMode="true" ><Button

android:id="@+id/button1"android:layout_width="fill_parent"android:layout_height="150px"android:text="Dugme 1" />

<Buttonandroid:id="@+id/button2"android:layout_width="fill_parent"android:layout_height="150px"android:text="Dugme 2" />

</LinearLayout> </ScrollView>

Page 70: It Vezbe Android

Informacione tehnolgijeInformacione tehnolgijeToast, Notification, Dialog

Page 71: It Vezbe Android

Toast

• Klasa Toast služi za prikaz teksta u prozoru koji se projavi na nekoliko sekundi i zatim biva uklonjen.uklonjen.

• Primer:Toast.makeText(getBaseContext(), "Pozdrav

svima", Toast.LENGTH_LONG).show();

Page 72: It Vezbe Android

Notification

• Toast klasa može da prikazuje obaveštenjakorisnicima, ali ima nedostatak da nije prezistentna – prikazuje poruku korisnicima samo nekoliko sekundi i zatim se uklanjaprezistentna – prikazuje poruku korisnicima samo nekoliko sekundi i zatim se uklanja

• Kod prikazivanja značajnih informacija može se desiti da korisnik u tom trenutku ne gleda na ekran i previdi tu informaciju

• Za prikaz značajnih poruka treba koristiti mnogo perzistentniji metod, poput prikaza poruke u statusnoj liniji

Page 73: It Vezbe Android

notificationview.xml<LinearLayout

xmlns:android="http://schemas.android.com/apk/res/android"android:orientation="vertical"android:orientation="vertical"android:layout_width="fill_parent"android:layout_height="fill_parent" >

<TextViewandroid:layout_width="fill_parent"android:layout_height="wrap_content"android:text="Kolokvijum iz Internet tehnologija je zakazan za 24.04.2014. godine. Materijal za pripremuse nalazi na web sajtu." />

</LinearLayout>

Page 74: It Vezbe Android

NotificationView.javapackage vts.zr.vts_it_vezbe;import android.app.Activity;import android.app.NotificationManager;import android.os.Bundle;public class NotificationView extends Activitypublic class NotificationView extends Activity{

@Overridepublic void onCreate(Bundle savedInstanceState) {

super.onCreate(savedInstanceState);setContentView(R.layout.notificationview);NotificationManager nm = (NotificationManager)

getSystemService(NOTIFICATION_SERVICE);nm.cancel(getIntent().getExtras().getInt("notificationID"));

}}

Page 75: It Vezbe Android

AndroidManifest.xml…<uses-permission android:name="android.permission.VIBRATE"/>…<activity

android:name=".NotificationView"android:name=".NotificationView"android:label="@string/app_name" ><intent-filter>

<action android:name="android.intent.action.NOTIFICATIONVIEW" />

<category android:name="android.intent.category.DEFAULT" />

</intent-filter></activity>

Page 76: It Vezbe Android

Poziv notifikacijeint notificationID = 1;@SuppressWarnings("deprecation")public void onNotification(View v){

Intent i = new Intent(this, NotificationView.class);i.putExtra("notificationID", notificationID);PendingIntent pendingIntent = PendingIntent.getActivity(this, 0, i, 0);PendingIntent pendingIntent = PendingIntent.getActivity(this, 0, i, 0);NotificationManager nm = (NotificationManager)

getSystemService(NOTIFICATION_SERVICE); Notification notif = new Notification(

R.drawable.ic_launcher, "Alarm: Kolokvijum iz IT",System.currentTimeMillis());

CharSequence from = "System Alarm";CharSequence message = "Kolokvijum iz Internet tehnologija..."; notif.setLatestEventInfo(this, from, message, pendingIntent);//---100ms pauza, vibracija 250ms, pause 100 ms i vibracija 500msnotif.vibrate = new long[] { 100, 250, 100, 500};nm.notify(notificationID, notif);

}

Page 77: It Vezbe Android

Dijalog• Dijalog je deo aktivnosti koji se kontroliše putem

sledećih metoda:▫ showDialog(int id_dijaloga)▫ dismissDialog(int id_dijaloga)

• Tipovi dijalog su:▫ AlertDialog▫ ProgressDialog▫ ProgressDialog▫ CustomDialog

• Pri tome je id_dijaloga celobrojna promenjiva koja ima neku vrednost

• Metod showDialog poziva metod koji detaljnije objašnjava kako dijalog treba da izgleda

• Primer pozivanja AlertDialog: public void onAlertDialog(View v){showDialog(DIALOG_ALERT);}

Page 78: It Vezbe Android

Primer AlertDialogprivate static final int DIALOG_ALERT = 10;@SuppressWarnings("deprecation")protected Dialog onCreateDialog(int id) {switch (id) {case DIALOG_ALERT:

String output11 = "";AlertDialog.Builder builder11 = new AlertDialog.Builder(this);output11+="Pitanje je ovde?";builder11.setMessage(output11);builder11.setCancelable(true);builder11.setPositiveButton("Da", new OkOnClickListener());builder11.setPositiveButton("Da", new OkOnClickListener());builder11.setNegativeButton("Ne", new CancelOnClickListener());AlertDialog dialog11 = builder11.create();dialog11.show();

break;}return super.onCreateDialog(id);

}private final class CancelOnClickListener implements DialogInterface.OnClickListener {public void onClick(DialogInterface dialog, int which) {Toast.makeText(getBaseContext(), "Ne", Toast.LENGTH_LONG).show(); }

}private final class OkOnClickListener implements DialogInterface.OnClickListener {public void onClick(DialogInterface dialog, int which) { Toast.makeText(getBaseContext(), "Da", Toast.LENGTH_LONG).show(); }

}

Page 79: It Vezbe Android

ProgressDialog

• ProgressDialog se obično izvršava kada kadaaplikacija izvršava zadatke koji dugo traju

Page 80: It Vezbe Android

Primer ProgressDialogProgressDialog progress;public void onProgressDialog(View v){progress = ProgressDialog.show(this, "Učitavanje","Molimo sačekajte", true);

new Thread(new Runnable() {@Overridepublic void run(){

try {Thread.sleep(5000);} catch (InterruptedException e) {} catch (InterruptedException e) {e.printStackTrace();}

runOnUiThread(new Runnable() {@Overridepublic void run(){

progress.dismiss();}

});}

}).start();}

Page 81: It Vezbe Android

Informacione tehnolgijeInformacione tehnolgijeSlanje SMS porukaMenijiIkonica

Page 82: It Vezbe Android

Slanje SMS poruka

• Android aplikacija omogućava slanje SMSporuka

• Slanje SMS poruka je moguće testirati i na • Slanje SMS poruka je moguće testirati i na emulatorima, gde je broj telefona emulatoraneka od vrednosti: “5554”, “5556”, “5558”…

• Pored programskog koda potrebno je u AndriodMainfest.xml dodati dozvolu za slanje SMS poruka:

<uses-permission android:name="android.permission.SEND_SMS"/>

Page 83: It Vezbe Android

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

xmlns:tools="http://schemas.android.com/tools"

android:layout_width="match_parent"

android:layout_height="match_parent"

android:orientation="vertical"

tools:context=".sms" >

<TextView

android:layout_width="wrap_content"

android:layout_height="wrap_content"

android:text="Broj" />

<EditText

android:id="@+id/smsbroj"

android:layout_width="fill_parent"

android:layout_height="wrap_content"/>android:layout_height="wrap_content"/>

<TextView

android:layout_width="wrap_content"

android:layout_height="wrap_content"

android:text="Poruka" />

<EditText

android:id="@+id/smsporuka"

android:layout_width="fill_parent"

android:layout_height="wrap_content"/>

<Button

android:layout_width="124dp"

android:layout_height="wrap_content"

android:layout_gravity="center_horizontal"

android:onClick="onSMS"

android:text="Pošalji" />

</LinearLayout>

Page 84: It Vezbe Android

Sms.java• Potrebno je dodati sledeće:

public void onSMS(View v){EditText etBroj = (EditText)findViewById(R.id.smsbroj);EditText etPoruka = (EditText)findViewById(R.id.smsporuka);EditText etPoruka = (EditText)findViewById(R.id.smsporuka);String phoneNumber = etBroj.getText().toString();String message = etPoruka.getText().toString();sendSMS(phoneNumber, message);}

private void sendSMS(String phoneNumber, String message){SmsManager sms = SmsManager.getDefault();sms.sendTextMessage(phoneNumber, null, message, null, null);}

Page 85: It Vezbe Android

Meniji• Meni sa opcijama se prikazuje uvek

kada korisnik pritisne meni taster• U zavisnosti od verzije Android

operativnog sistema meni se može operativnog sistema meni se može nalaziti na drugačijim pozicijama i izgledati drugačije

• Iz stavki menija se mogu vršiti razne aktivnosti od kojih su neke:▫ Preusmeravanja na web lokaciju▫ Odlazak na drugu aktivnost▫ Prikaz Toast poruke…

Page 86: It Vezbe Android

res/menu/main.xml<menu xmlns:android="http://schemas.android.com/apk/res/android" >

<item android:id="@+id/mnuSajtSkole"android:title="Sajt škole" />

<item android:id="@+id/mnuSMS"<item android:id="@+id/mnuSMS"android:title="Slanje SMS" />

<item android:id="@+id/mnuToast"android:title="Toast" />

</menu>

Page 87: It Vezbe Android

MainActivity.java…public boolean onOptionsItemSelected(MenuItem item) {switch (item.getItemId()) {

case R.id.mnuSajtSkole:Intent i1 = new Intent("android.intent.action.VIEW");i1.setData(Uri.parse("http://www.vts-zr.edu.rs"));i1.setData(Uri.parse("http://www.vts-zr.edu.rs"));startActivity(i1); return true;

case R.id.mnuSMS:startActivity(new Intent(this, Sms.class));return true;

case R.id.mnuToast:Toast.makeText(getBaseContext(), "Poruka iz menija",Toast.LENGTH_SHORT).show();return true;

default:return super.onOptionsItemSelected(item);

}}…

Page 88: It Vezbe Android

Ikonica• Najjednostavniji

način za izmenu ikonice“ic_launcher.png” je editovanje postojeće ikonice koja postoji u više veličinaviše veličina

• Potrebno je izmeniti sve verzije ikonicekako bi na svim veličinama ekrana izgledale isto

Page 89: It Vezbe Android

Informacione tehnolgijeInformacione tehnolgijeLBS (engl. Location-based services)

Page 90: It Vezbe Android

LBS (engl. Location-based services)

• LBS omogućava korišćenje lokacijskih servisa na Andorid uređaju

• Preduslovi:• Preduslovi:▫ Potrebno je posedovati gmail nalog▫ Napraviti nov projekat na Google APIs console.

Posle toga mu je moguće pristupati na https://console.developers.google.com/

Page 91: It Vezbe Android

Kreiranje projekta• Na ovoj stranici je

potrebno napraviti novi projekatnapraviti novi projekat

• To se vrši klikom na dugme “Createproject…”

• Posle toga je potrebno pristati na ugovor

Page 92: It Vezbe Android

Ugovor

Page 93: It Vezbe Android

Uključivanje funkcionalnosti mape

Page 94: It Vezbe Android

Pravljenje ključa (Public API access)

Page 95: It Vezbe Android

SHA1 Fingerprint (U Eclipse na Window->Preferences->Android->Build)

Page 96: It Vezbe Android

Unos SHA1 + namspace = API key

Page 97: It Vezbe Android

API key• API key(u ovom slučaju AIzaSyBy7yf3DMSwvVR-StLfCSEl7Khcuf-lBa0) je vrednost koja nam je potrebna za uspešno povezivanje aplikacije i servisa

Page 98: It Vezbe Android

U projekat je potrebno dodati referencu

Page 99: It Vezbe Android

AndroidManifest.xml…

<permission android:name="zr.vts.tokvts.permission.MAPS_RECEIVE" android:protectionLevel="signature" android:required="false"/>

<uses-permission android:name="zr.vts.tokvts.permission.MAPS_RECEIVE" android:required="false"/>

<uses-permission android:name="android.permission.INTERNET" android:required="false"/>

<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" android:required="false"/>

<uses-permission android:name="com.google.android.providers.gsf.permission.READ_GSERVICES" android:required="false"/>

<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" android:required="false"/>

<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" android:required="false"/>

<uses-permission android:name="android.permission.CALL_PHONE" android:required="false"/>

<meta-data

android:name="com.google.android.maps.v2.API_KEY"

android:value="AIzaSyBy7yf3DMSwvVR-StLfCSEl7Khcuf-lBa0" />

Page 100: It Vezbe Android

maps.xml<RelativeLayout

xmlns:android="http://schemas.android.com/apk/res/android"xmlns:tools="http://schemas.android.com/tools"android:layout_width="match_parent"android:layout_height="match_parent"android:layout_height="match_parent"android:paddingBottom="@dimen/activity_vertical_margin"android:paddingLeft="@dimen/activity_horizontal_margin"android:paddingRight="@dimen/activity_horizontal_margin"android:paddingTop="@dimen/activity_vertical_margin"tools:context=".maps" >

<fragment android:id="@+id/map"android:layout_width="match_parent"android:layout_height="match_parent"class="com.google.android.gms.maps.SupportMapFragment"/>

</RelativeLayout>

Page 101: It Vezbe Android

Maps.javapackage vts.zr.vts_it_vezbe;

import com.google.android.gms.maps.CameraUpdateFactory;import com.google.android.gms.maps.GoogleMap;import com.google.android.gms.maps.SupportMapFragment;import com.google.android.gms.maps.model.BitmapDescriptorFactory;import com.google.android.gms.maps.model.LatLng;import com.google.android.gms.maps.model.MarkerOptions;import android.os.Bundle;import android.app.ProgressDialog;import android.content.Intent;import android.support.v4.app.FragmentActivity;import android.view.Menu;import android.view.MenuItem;import android.widget.Toast;

public class Maps extends FragmentActivity {public class Maps extends FragmentActivity {private GoogleMap gmap;ProgressDialog progDailog;@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.maps);initMap();}

private void initMap(){try {SupportMapFragment mf = (SupportMapFragment) getSupportFragmentManager().findFragmentById(R.id.map);gmap = mf.getMap();gmap.setMyLocationEnabled(true);gmap.setMapType(GoogleMap.MAP_TYPE_NORMAL);} catch (Exception e) {Toast.makeText(getBaseContext(), "initMap error", Toast.LENGTH_SHORT).show();e.printStackTrace();}}}

Page 102: It Vezbe Android

Primer dodavanja markera – Maps.java• Pozvatu funkciju u onCreate:addMarkersToMap();• U nastavku odati sledeći kod:private void addMarkersToMap(){LatLng vtszr = new LatLng(45.377691,20.382857);try {gmap.addMarker(new MarkerOptions().title("Visoka tehnička škola strukovnih studija u Zrenjaninu").snippet("Đorđa Stratimirovića 23, 23000 Zrenjanin")

.position(vtszr)

.icon(BitmapDescriptorFactory.defaultMarker(BitmapDescriptorFactory.HUE_ORANGE))

.icon(BitmapDescriptorFactory.fromResource(R.drawable.ic_launcher)));} catch (Exception e) {Toast.makeText(getBaseContext(), "Neuspešno učitavanje markera",

Toast.LENGTH_SHORT).show();e.printStackTrace();}try {gmap.moveCamera(CameraUpdateFactory.newLatLngZoom(vtszr, 15));gmap.animateCamera(CameraUpdateFactory.zoomTo(15), 2000, null);} catch (Exception e) {Toast.makeText(getBaseContext(), "Neuspešno zumiranje",

Toast.LENGTH_SHORT).show();e.printStackTrace();}}

Page 103: It Vezbe Android

Informacione tehnolgijeInformacione tehnolgijeObjavljivanje Android aplikacije

Page 104: It Vezbe Android

Izvoz projekta• Kada je

aplikacija završena i iztestirana završena i iztestirana potrebno je uraditi njen izvoz u verziju za objavljivanje

• Desni klik > Export

Page 105: It Vezbe Android

Izvoz projekta

Page 106: It Vezbe Android

Ukoliko nemamo keystore možemo napraviti jedan

• Potrebno je da unesemo putanju za keystore i da unesemo šifru dva putaunesemo šifru dva puta

• Šifru je neophodno zapamtiti za kasniju upotrebu

• Zatim je potrebno napraviti i ključ

Page 107: It Vezbe Android

Lokacija odredišnog fajla• Na kraju je potrebno odrediti lokaciju i naziv odredišnog fajla• Posle ovoga je fajl spreman za objvaljivanje na GooglePlay

prodavnici

Page 108: It Vezbe Android

Literatura

• Prezentacija je u skladu sa knjigom: Wei-MengLee, Android 4 razvoj aplikacija, Kompjuter biblioteka, 2012, ISBN broj: 978-86-7310-488-1. na sledeći način:biblioteka, 2012, ISBN broj: 978-86-7310-488-1. na sledeći način:▫ Android SDK. AVDHello World aplikacija , strane

1-33▫ Dizajniranje korisničkog interfejsa pomoću

pogleda, strana 159-202▫ Aktivnosti i namere, strana 35-68 i 85-97▫ Layout, strana 105-123