Frenkelove vezbe za Parkinsonovu bolestFull description
Vezbe Za Trbusnjake!!!
Natalio Oswaldo Salinas Ponce Jhonathan Noe Suarez ChavezDescripción completa
Descripción completa
Descripción completa
descripcion del so androidDescripción completa
Descripción completa
androidDescripción completa
anDescripción completa
Criando aplicações em android
Descrição completa
Full description
Descripción completa
Criando aplicações em android
Sistema AndroidDescripción completa
Android aplikacije
Android SDK. AVD, Hell He lloo Wo Worl rld d ap apli lika kaci cija ja
Android SDK • Prvi rvi i najvažni ažnijji soft oftver koji je potreb rebno preu reuzeti je Android SDK • On sadrži mnoštvo korisnih elemenata: debugger, biblioteke emulator dokumentaci u… • 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/downl oads/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.
Android SDK Manager
• Dostupan je na Window>Android SDK Manager • Upravlja različitim verzijama Android SDK-a, preko njega se vrši update
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
Kreiranje AVD • Potrebno je kliknuti na dugme New, datim ime , uređaja, i izvršiti ostala podešavanja, i kliknuti OK kako bi se napravio novi AVD.
Pokretanje AVD • U Android Virtual Device Manager selektovati virtuelni uređaj, kliknuti na Start… i zatim na Launch
AVD • Virtuelni uređaj je pokrenut u skladu sa podešavanjim a koje smo napravili
Hello World aplikacija • Daje se postupak pravljanja jedne Android aplikacije • Otići na File>New>Android Application Project ▫ ▫ 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
IDE – Hello World projekat
Pokretanje Hello World aplikacije
Od Hello World do Pozdrav Svete • Napraviti izmenu kao na slici i ponovo pokrenuti AVD
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 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
AndroidManifest.xml • U ovoj datotecu su definisani između ostalog: ▫ Paket aplikacije: package="zr.vts.it“ ▫ Kod verzi e a likaci e: 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"
Dizajniranje korisničkog interfejsa pomoću pogleda
Pogledi • Anstdroid pruža mogućnost za rad sa različitim pogledima, gde između ostalog spadaju: ▫
– , … 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.
Osnovni pogledi • Osnovni pogledi se jednostavno koriste pri projektovanju korisničkog interfejsa Android aplikacije: ▫ ▫ ▫ ▫ ▫ ▫
– 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
TextView • TextView se koristi pri prikazivanju teksta korisnicima • Primer:
EditText • Omogućava editovanje teksta • android:id omogućava jedinstvenu identifikaciju • Primer:
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: < u on an ro : = + n ave 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(); }
ImageButton • Slično kao u kod Button, ali postoji slika • Osobina android:src omogućava izbor slike
CheckBox • Tip tastera koji sadrži dva stanja: selektovano i deselektovano
ToggleButton • Prikazuje selektovana/deselektovana stanja korišćenjem svetlosnog indikatora
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:
Osnovni pogledi
Picker pogledi • Često se vrši selektovanje datuma i vremena u Android aplikacijama. Za ovu namenu koriste ▫ TimePicker – selekcija vremena ▫ DatePicker – selekcija datuma
TimePicker pogled • Time TimePi Pick cker er omogu omoguća ćava va sele selekc kcij iju u vrem vremen ena. a. • Primer: " =" android:layout_width="wrap_content" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_height="wrap_content" />
Kako videti trenutno vreme? Uneti navedeni 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; im ort ort andr androi oid. d.wi wid d et.T et.Toa oast st public class DateTimePicker extends Activity { TimePicker timePicker;
List pogledi • List pogledi omogućavaju prikaz dužih lista stavki. Za ovu namenu koriste se: ▫ ▫ SpinnerView
ListView pogled • ListView pogled omogućava rad sa selekciju stavki iz ove liste • Primer:
ListView pogled – java kod package 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 { Strin studPro rami = "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(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(); } }
SpinnerView pogled • Spinner View pogled omogućava rad sa selekciju stavki iz ove liste • Primer:
SpinnerView pogled – java kod package 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žen erski 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 adapter = new ArrayAdapter(this, android.R.layout.simple_list_item_single_choice, studProgrami); s1.setAdapter(adapter); } }
Aktivnosti i namere
Aktivnost • Aktivnost je prozor koji sadrži korisnički interfejs u aplikaciji • Glavni cilj aktivnosti je omogućavanje interakcije sa korisnikom • 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.
activity101activity.xml • U direktorijumu res/layout treba napraviti fajl activity101activity.xml. U nastavku se daje njegov sadržaj:
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.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)
Deklaracija u AndroidManifest.xml • Svaka aktivnost koja se dodaje mora biti deklarisana u fajlu AndroidManifest.xml. Primer:
Životni ciklus aktivnosti • 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 or sn a zapo ne ntera c u ▫ 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
Životni ciklus aktivnosti - Primer package 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"); }
}
Način funkcionisanja • Kada se aktivnost startuje uvek se izvršavaju događaju onStart() i onResume() • onCreate - za kreiran e i instanciran e ob ekata 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
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 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…
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){ 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)); }
Deklaracija u AndroidManifest.xml • Druga aktivnost se mora dodati i u AndroidManifest.xml. Primer:
Vraćanje aktivnosti iz inicirane aktivnosti • Ukoliko postoji potreba za vraćanjem neke vrednosti iz inicirane aktivnosti, potrebno je aktivnosti. • Druga aktivnost obezbeđuje vrednost koja se vraća prvoj aktivnosti
Aktivnost koja poziva (i prikazuje vraćenu aktivnost) ... int request_Code = 1; public void onSecondActivity(View view){ startActivityForResult(new Intent(this, SecondActivity.class), re uest_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(); } } } ...
Pozivana aktivnost(koja vraća rezultat) … public void btnPotvrdi(View v){ Intent data = new Intent(); //Definisanje EditText pogleda EditText txtIme = (EditText)findViewById(R.id.etIme); //Definisanje podataka koji se vracaju data.setData(Uri.parse(txtIme.getText ().toString())); setResult(RESULT_OK, data); //gasenje ove aktivnosti finish(); } …
… …
Slanje podataka u iniciranu aktivnost • Moguće je da jedna aktivnost pošalje neki podatak u aktivnost koju je inicirala objekat • Postoje dva načina za slanje podataka između aktivnost: ▫ Kao ključ-vrednost par ▫ Korišćenjem Bundle
Slanje podataka u iniciranu aktivnost - primer Glavna aktivnost public void onThirdActivity(View view){ Intent intent = new Intent(this, ThirdActivity.class); // I. Nacin key/value intent.putExtra("poruka1", "Pozdrav iz glavne aktivnosti"); // II. Način - bundle Bundle 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 aktivnosti Intent intent = getIntent(); // I. Nacin key/value ispis String p1 = intent.getStringExtra("poruka1"); Toast.makeText(getBaseContext(), p1, Toast.LENGTH_SHORT).show(); // II. Način - bundle ispis Bundle bundle = intent.getExtras(); String p2 = bundle.getString("poruka2"); Toast.makeText(getBaseContext(), p2, Toast.LENGTH_SHORT).show(); }
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 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:
Primeri: • Browser: public void onClickWebBrowser(View view) { Intent i = new Intent("android.intent.action.VIEW"); i.setData Uri. arse "htt : www.vts-zr.edu.rs" startActivity(i); } • Telefonski poziv public void onClickMakeCalls(View view) { Intent i = new Intent(Intent. ACTION_CALL); i.setData(Uri. parse("tel:0038123123456")); startActivity(i); }
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)
Uvod • Osnovna jedinica Android aplikacije je aktivnost • Aktivnost omogućava prikazivanje korisničkog interfe sa korišćen em 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 ); }
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 prikazivanja
• Android podržava sledeće grupe pogleda, koje se mogu kombinovati u okviru jedne aktivnosti: ▫ ▫ ▫ ▫ ▫ ▫
Definiše širinu za View ili ViewGroup Definiše visinu za View ili ViewGroup Margina iznad View ili ViewGroup Margina ispodView ili ViewGroup Margina levo od View ili ViewGroup Margina desno od View ili ViewGroup Specifikacija kako se pozicionira View Specifikacija dodatnog prostora u rasporedu za View X koordinata View ili ViewGroup elementa Y koordinata View ili ViewGroup elementa
LinearLayout • Uređuje poglede u jednu kolonu ili vrstu • Pogledi se slažu " " ▫ Horizontalno (android:orientation="horizontal" )
Linearl.xml
tools:context=".linearl" >
AbsoluteLayout • Omogućava tačno određivanje lokacije elemenata. Na primer: _ “ ” 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
TableLayout • Grupiše elemente u vrste i kolone • se koristi za označavanje vrste u • 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
tablel.xml
RelativeLayout • Ovaj raspored omogućava da se odredi način na koji se izvedeni element prikazuje u odnosu na osnovne elemente • Mogu se koristiti sledeći atributi: ▫ ▫ ▫ ▫ ▫ ▫
FrameLayout • Ovaj raspored se može koristiti za prikazivanje e nog pog e a • 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
ScroolView • Ovo je specijalni tip FrameLayout prikaza • 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
Toast • Klasa Toast služi za prikaz teksta u prozoru koji se projavi na nekoliko sekundi i zatim biva . • Primer: Toast.makeText(getBaseContext(), "Pozdrav svima", Toast.LENGTH_LONG).show();
Notification • Toast klasa može da prikazuje obaveštenja korisnicima, ali ima nedostatak da nije rezistentna – rikazu e oruku 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
Poziv notifikacije int notificationID = 1; @SuppressWarnings("deprecation") public void onNotification(View v){ Intent i = new Intent(this, NotificationView.class); i.putExtra("notificationID", notificationID); en ng n en pen ng n en = en ng n en .ge c v y s, 0, , 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 500ms notif.vibrate = new long[] { 100, 250, 100, 500}; nm.notify(notificationID, notif); }
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 ▫ rogress a og ▫ 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); }
Primer AlertDialog private 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.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(); } }
ProgressDialog • ProgressDialog se obično izvršava kada kada aplikacija izvršava zadatke koji dugo traju
Primer ProgressDialog ProgressDialog progress; public void onProgressDialog(View v){ progress = ProgressDialog.show(this, "Učitavanje", "Molimo sačekajte", true); new Thread(new Runnable() { @Override public void run() { try { Thread.sleep(5000); ca c n errup e xcep on e e.printStackTrace(); } runOnUiThread(new Runnable() { @Override public void run() { progress.dismiss(); } }); } }).start(); }
Slanje SMS poruka Meniji Ikonica
Slanje SMS poruka • Android aplikacija omogućava slanje SMS poruka • Slan e SMS oruka e mo uće testirati i na emulatorima, gde je broj telefona emulatora neka od vrednosti: “5554”, “5556”, “5558”… • Pored programskog koda potrebno je u AndriodMainfest.xml dodati dozvolu za slanje SMS poruka:
sms.xml
Sms.java • Potrebno je dodati sledeće: public void onSMS(View v){ EditText etBroj = (EditText)findViewById(R.id.smsbroj); E tText etPoru a = E tText n V ewByI R. .smsporu a ; 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); }
Meniji • Meni sa opcijama se prikazuje uvek kada korisnik pritisne meni taster • U zavisnosti od verzije Android 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…
res/menu/main.xml
MainActivity.java … public boolean onOptionsItemSelected(MenuItem item) { switch (item.getItemId()) { case R.id.mnuSajtSkole: Intent i1 = new Intent("android.intent.action.VIEW"); 1.se a a r . parse p: www.v s-zr.e u.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); } } …
Ikonica
• Najjednostavniji način za izmenu ikonice “ic_launcher.png” je editovanje postojeće ikonice koja postoji u više veličina • Potrebno je izmeniti sve verzije ikonice kako bi na svim veličinama ekrana izgledale isto
LBS (engl. Location-based services)
LBS (engl. Location-based services) • LBS omogućava korišćenje lokacijskih servisa na Andorid uređaju ▫ 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/
Kreiranje projekta • Na ovoj stranici je potrebno na raviti novi projekat • To se vrši klikom na dugme “Create project…” • Posle toga je potrebno pristati na ugovor
Ugovor
Uključivanje funkcionalnosti mape
Pravljenje ključa (Public API access)
SHA1 Fingerprint (U Eclipse na Window->Preferences->Android->Build)
Unos SHA1 + namspace = API key
API key • API key (u ovom slučaju AIzaSyBy7yf3DMSwvVR-StLfCSEl7Khcuf-lBa0) je vrednost koja nam je potrebna za uspešno povezivanje aplikacije i servisa
Maps.java package 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; pu c c ass aps ex en s ragmen c v y private GoogleMap gmap; ProgressDialog progDailog; @Override protected 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(); }}}
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")
Izvoz projekta • Kada je aplikacija završena i iztestirana potrebno je uraditi njen izvoz u verziju za objavljivanje • Desni klik > Export
Izvoz projekta
Ukoliko nemamo keystore možemo napraviti jedan • Potrebno je da unesemo putanju za keystore i da • Šifru je neophodno zapamtiti za kasniju upotrebu • Zatim je potrebno napraviti i ključ
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