Škola Android programiranja časopisa Vidi
Android programiranje #11: Standardni dijelovi aplikacije
Na kraju teksta u prethodnom broju časopisa naveden je malo veći segment programskog koda za izvođenje nekoliko bitnih stvari u programu, ali jednostavno nije bilo dovoljno mjesta za njegovo detaljnije objašnjenje. Zato u današnjem nastavku slijedi malo detaljnija rasprava o korištenim objektima i metodama u tom dijelu aplikacije.
Razjasnimo prvo namjenu izdvojenog dijela programskog koda s kraja prethodnog nastavka, kako bi lakše mogli pratiti detalje u nastavku. Ideja je da korisnik aplikacije u trenutku kad doživi nekakvu nezgodu (koja bitno utječe na njegovo zdravstveno stanje) može što jednostavnije i brže poslati SMS poruku na unaprijed definirani broj, kako bi izabranu osobu ili ustanovu obavijestio o svojoj nezgodi. Pretpostavka za izvođenje takvog postupka je da nakon nezgode ostane u svjesnom stanju, kako bi zaista mogao pokrenuti aplikaciju te pritisnuti gumb za slanje SMS poruke. Ako može napraviti tu operaciju, onda može pritisnuti i drugi gumb kako bi zabilježio vrijeme nezgode, jer se tako kod pružanja prve pomoći lako može ustanoviti koliko je vremena doista prošlo od nezgode. To može biti vrlo bitan faktor za poduzimanje različitih operacija nad unesrećenim. Čak i ako korisnik aplikacije u trenutku kad stigne prva pomoć bude u nesvijesti, može se pročitati podatak o trenutku nezgode, kao i drugim bitnim karakteristikama unesrećenog (krvna grupa, kronične bolesti i slično). Te informacije su dostupne i u situaciji kad SMS poruka nije poslana, a nije zabilježen ni trenutak nezgode – bitno je samo da spasitelji malo „pročeprkaju“ po Android mobitelu, jer je on najverojatnije negdje pri ruci. Ostaje još samo odgovor na pitanje zašto su operacije slanja SMS poruke i bilježenja trenutka nezgode razdvojene. Postoje situacije kad SMS poruku, a pogotovo neke njezine dijelove (vidi nastavak teksta) nije moguće ni pripremiti ni poslati, pa se u tom slučaju može zabilježiti samo trenutak nezgode.

LocationManager: Vrlo složen objekt na Android platformi zadužen za dobijanje točne geografske lokacije.
Prvi dio programskog koda je najjednostavniji za objašnjavanje jer služi za obično određivanje točnog vremena nakon pritiska korisnika na odgovarajući gumb aplikacije. To vrijeme se trajno pamti kako bi ga spasitelji mogli naknadno očitati. Ovaj segment programskog koda „zamotan“ je u standardnu rutinu za obradu pogreške, u slučaju da se dogodi nekakav problem tijekom izvođenja aplikacije.
public void btnPosaljiSMSClick(View view)
{
final Button btnPosaljiSMS = (Button) findViewById(R.id.btnPosaljiSMS);
Calendar Kalendar = Calendar.getInstance ();
CharSequence mTrenutnoVrijeme = Kalendar.getTime().toString();
mGodina = Kalendar.get(Calendar.YEAR);
mMjesec = Kalendar.get(Calendar.MONTH);
mDan = Kalendar.get(Calendar.DAY_OF_MONTH);
mSati = Kalendar.get(Calendar.HOUR_OF_DAY);
mMinute = Kalendar.get(Calendar.MINUTE);
mSekunde = Kalendar.get(Calendar.SECOND );
mTrenutnoVrijeme = Integer.toString(mDan) + “.” +
Integer.toString(mMjesec) + “.” +
Integer.toString(mGodina) + ” ” +
Integer.toString(mSati) + “:” +
Integer.toString(mMinute) + “:” +
Integer.toString(mSekunde);
setContentView(R.layout.critical3);
try {
VratiPodatkeCritical3();
} catch (IOException e1) {
e1.printStackTrace();
}
final CheckBox tp = (CheckBox) findViewById(R.id.chkGPSPozicija);
Da bi SMS poruka koja se šalje na unaprijed definirani telefonski broj bila što korisnija, ideja je da njezin dio bude točna geografska lokacija s koje je poruka poslana, kako bi se što brže i jednostavnije došlo do unesrećenog korisnika aplikacije. Ako mobilni telefon (ili neki drugi uređaj koji se temelji na Android platformi) u sebi sadrži odgovarajući hardverski dio za dobijanje takvog podatka, onda slijedeći dio programskog koda koristi Android objekt LocationManager za dobijanje potrebnog geolokacijskog podatka.
String pozicija = “”;
if (tp.isChecked())
{
try
{
LocationManager locationManager;
String context = Context.LOCATION_SERVICE;
locationManager = (LocationManager)getSystemService(context);
String provider = LocationManager.GPS_PROVIDER;
Location location = locationManager.getLastKnownLocation(provider);
double lat = location.getLatitude();
double lng = location.getLongitude();
pozicija = ” ” + Double.toString(lat) + ” / ” + Double.toString(lat);
}
catch (Exception e)
{
e.printStackTrace();
}
}
Prethodne naredbe sadrže još nekoliko naredbi za formatiranje podataka o geografskoj lokaciji, kako bi podaci u okviru poruke bili prikazani na što čitljiviji podaci razumljiv spasiteljima. Kao i obično, bitno je da takv dio aplikacije podložan pogreškama bude obuhvaćen u strukturu za obradu pogrešaka. Zahtijevani podatak može u nekom trenutku jednostavno biti nedostupan. Na primjer, izvor GPS podataka je uništen solarnom bakljom. Dobro – malo se šalimo, mnogo je vjerojatniji neki drugi uzrok problema, iako prema najavama nekih stručnjaka 2012 godine to možda uopće više neće biti samo šala.
LocationManager je vrlo složen objekt na Android platformi pa njegovo detaljno opisivanje prelazi okvire ovog teksta. Osnovni primjer prikazan u prethodnom dijelu programskog koda, trebao bi vam poslužiti kao vodič za dodatno istraživanje pratećih uputa o Android SDK sustavu.
Nakon što su pripremljeni svi potrebni podaci o geografskoj lokaciji, preostaje još samo njihovo spajanje s unaprijed definiranim fiksnim dijelom SMS poruke, te slanje poruke na prije upisani mobilni broj. U slučaju da navedena dva podatka nisu pripremljena, onda se korisniku aplikacije javlja odgovarajuća poruka kako bi se riješio problem. Za to se koristi funkcija o čijoj smo namjeni i djelovanju raspravljali u jednom od prethodnih nastavaka serijala.
Sasvim je jasno da kritična situacija, u kojoj se može naći korisnik aplikacije, nije baš idealan trenutak da aplikacija javi kako smo u fazi njezinog punjenja početnim podacima zaboravili navesti neki detalj (fiksni dio SMS poruke ili odredišni broj). Otprilike se radi o istoj situaciji kao kad bi vaš najnoviji automobil (dostupan uz mjesečnu ratu od svega 500 kn, ali uz učešće od 30 posto i ostatak vrijednosti od 30 posto – kako to danas nude sitnim slovima neki oglasi na koje se skoro navukao i autor ovih redova), u trenutku hitnog kočenja javio nekakvu poruku da to ne može ili ne želi napraviti. Rješenje problema je vrlo jednostavno. Nakon upisivanja svih potrebnih podataka u aplikaciju na samom početku njezina korištenja, treba poslati probnu poruku te provjeriti je li zaista sve u redu.
try
{
final EditText tmp = (EditText) findViewById(R.id.txtSMSPoruka);
String tmps = tmp.getText().toString();
if (tmps.length() == 0)
{
setContentView(R.layout.main);
MsgBox(“Nije definiran tekst SMS poruke!”, “Upozorenje”);
return;
}
final EditText tmpbr = (EditText) findViewById(R.id.txtSMSBroj);
String tmpsbr = tmpbr.getText().toString();
if (tmpsbr.length() == 0)
{
setContentView(R.layout.main);
MsgBox(“Nije definiran broj za slanje SMS poruke!”, “Upozorenje”);
return;
}
setContentView(R.layout.main);
VratiPodatkeMain();
tmps = tmps + pozicija;
SmsManager sm = SmsManager.getDefault();
sm.sendTextMessage(tmpsbr, null, tmps + pozicija, null, null);
}
catch (Exception e)
{
MsgBox(e.getMessage(),”Greška”);
e.printStackTrace();
}
AlertDialog ad = new AlertDialog.Builder(prvaPomoc.this).create();
CharSequence poruka = “Zabilježeno vrijeme slanja SMS poruke za pomoć\n\n” ;
poruka = poruka + mTrenutnoVrijeme.toString();
ad.setTitle(“Potvrda operacije”);
ad.setMessage(poruka);
ad.setButton(“Zatvori”, new DialogInterface.OnClickListener()
{
@Override
public void onClick(DialogInterface arg0, int arg1)
{
}
});
ad.show();
Na kraju cijelog postupka prikazuje se točno vrijeme slanja poruke. Ne treba posebno ni napominjati da se svi podaci iz prethodne operacije spremaju u odgovarajuća „spremišta“ u mobilnom telefonu, kako bi i kasnije bili dostupni prema potrebi.
btnPosaljiSMS.setText(“SMS poruka: ” + mTrenutnoVrijeme);
try {
SpremiPodatkeMain();
} catch (IOException e) {
e.printStackTrace();
}
}
Na temelju svega dosad napisanog u ovom te u prethodnih nekoliko brojeva, već bi trebali biti u mogućnosti sami izrađivati relativno složene Android aplikacije. Međutim, još uvijek nismo završili serijal, jer nam je preostala demonstracija korištenja nekoliko bitnih tehnika kao što je dobro poznati Google Maps, preuzimanje podataka s ugrađenih senzora, korištenje dodatnih grafičkih i zvučnih mogućnosti te još poneka zanimljivih sitnica. Ostalo je još dosta zanimljivog materijala za slijedećih nekoliko nastavaka, posebno ako sve te dijelove uz dodatak već obrađenih želimo kreativno povezati u prave aplikacije.

LocationManager: Vrlo složen objekt na Android platformi zadužen za dobijanje točne geografske lokacije.
Budući da smo u zadnjih nekoliko brojeva „vadili“ dijelove programskog koda iz relativno složene aplikacije, nismo na pratećem digitalnom mediju objavljivali dijelove projekta. Od slijedećeg puta ponovo se vraćamo na staru dobru praksu korištenja pratećeg medija uz časopi, kako se ne bi trebali sami mučiti s prekucavanjem manjih ili većih dijelova programskog koda u korisničko sučelje vlastitog računala.
Piše: Nenad Crnko
| Print article | This entry was posted by Ivan Kišić on 25/10/2011 at 17:38, and is filed under Škola. Follow any responses to this post through RSS 2.0. Both comments and pings are currently closed. |
Comments are closed.
