Pretraga
  | 
 
android

Android ZET SMS

Prvi članak iz serije android članaka prikazuje jednostavnu aplikaciju čiji je cilj slanje sms-a za korištenje usluge ZET SMS karte

Kontakt: ipadavic@ifnet.hr

Uvod

Prvi u nizu članaka vezanih uz razvoja aplikacija na android OS-u, predstavlja trivijalnu aplikaciju čiji cilj je upoznavanje s osnovnim principima razvoja za Android. Aplikacija se sastoji od jednog gumba na čiji klik automatski šaljemo SMS poruku na Broj „8585“ za tekstom poruke „ZG“.


Osim edukativnog karaktera ovaj članak (aplikacija), mnogima će poslužiti da uštede koju kunu i da uvijek budu u pripravnosti da ih ne zaskoče lukavi kontrolori Zagrebačkog ZET-a.


U ovom članku nećemo pokrivati način instaliranja i podešavanja razvojne okoline. Ukoliko Vam se to pokaže kao preteški zadatak možda ovaj članak i razvoj aplikacija za Android i nije baš za vas :P.


Aplikacija je u cijelosti napisana koristeći Eclipse IDE, te cilja (targetira) na verziju 1.5 Android Framework-a (Moj Htc Hero maximalno podržava 1.5 :D )


Aplikacija

android
Slika 1. Prikazuje formu za kreiranje novog android
projekta u eclipse razvojnom alatu


Prvo kreiramo novi Android projekt. Projekt nazovimo SendZetSms. Označimo verziju framework-a za koju targetiramo aplikaciju. Naziv aplikacije je tekst koji će se nalaziti ispod ikonice aplikacije, kao i u svim labelama koje predstavljaju aplikaciju (različiti izbornici).


Naziv Java paketa. U pravilu se koristi Vaša domena + naziv projekta. Mora obavezno imati jednu točku.


Obavezno uključimo opciju Create Activity i nazovemo aktivnost MainActivity. Eclipse će za nas u ovom slučaju kreirati klasu MainActivity koja će biti polazna točka te u osnovi i jedina klasa naše aplikacije.

Nakon kreiranja novog projekta, Eclipse će generirati strukturu projekta na sljedeći način, kako je prikazano na slici 2.

android
Slika 2. Struktura android projekta

Nama najvažnije datoteke su sljedeće:
  • MainActivity.java u scr folderu. Izvorni kod klase naše polazne aktivnosti.

  • Icon.png u res/drawable folderu. Predstavlja ikonicu za našu aplikaciju koja će se nalaziti na Home ekranu mobitela.

  • Main.xml u res/layout folder. XML datoteka u kojoj je definiran izgled i smještaj kontrola naše aplikacije.

  • AndroidManifest.xml u root-u projekta. XML datoteka koja opisuje našu aplikaciju. Ovo je polazna datoteka koju koristi mobitel kako bi znao što treba napraviti sa aplikacijom, te koje resurse mobitela dopustiti da aplikacija koristi.



Izgled naše aplikacije definiran je u main.xml datoteci na sljedeći način:
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
>
    <Button
    android:layout_height="wrap_content"
    android:layout_width = "wrap_content"
    android:id="@+id/MySendSmsButton"
    android:text="Pošalji Sms"
    android:layout_centerInParent="true"
    >
</Button>
</RelativeLayout>

Odabrali smo prozor sa relativnim pozicioniranjem kako bi mogli vertikalno i horizontalno centrirati naš gumb.

Button XML tagom definirali smo naš gumb. Atributom android:text definiramo što će pisati na gumbu, a atributom android:id jedinstveno označavamo gumb kako bi ga mogli adresirati unutar koda aplikacije.

Java kod aplikacije se nalazi u MainActivity.java datoteci. Riječ je o MainActivity klasi koja nasljeđuje Acitvity klasu. Aktivnost predstavlja korisničko sučelje kojim možemo napraviti određenu akciju. U našem slučaju Aktivnost sadrži prozor aplikacije sa jednim gumbom na čiji dodir šaljemo SMS.

package hr.ifnet.SendZetSms;

import android.app.Activity;
import android.content.Context;
import android.os.Bundle;
import android.os.Handler;
import android.telephony.gsm.SmsManager;
import android.view.View;
import android.widget.Button;
import android.widget.Toast;

public class MainActivity extends Activity {
   private Context myContext;
   private Handler myHandler = new Handler();
   @Override
   public void onCreate(Bundle savedInstanceState) {
      super.onCreate(savedInstanceState);
      setContentView(R.layout.main);
      myContext = this;
      final Button btn = (Button) findViewById(R.id.MySendSmsButton);
      btn.setOnClickListener(new Button.OnClickListener() {
         public void onClick(View v) {
         myHandler.post(new Runnable() {
            public void run() {
               Toast.makeText(myContext,"Slanje ZET SOS poruke :) u tijeku", Toast.LENGTH_LONG).show();
               SmsManager sms = SmsManager.getDefault();
               sms.sendTextMessage("8585",null,"ZG",null,null);
            }
         });
         }
      });
      }
   }

Metoda OnCreate je polazna metoda koja se okida prilikom pokretanja aplikacije. Linija

setContentView(R.layout.main);

odgovorna je za postavljanje izgleda grafičkog sučelja i govori da je izgled definiran u main.xml datoteci kao što je gore opisano.

Linija myContext = this; je odgovorna za postavljanje globalno dostupne varijable myContext na trenutni kontekst aplikacije. Kontekst aplikacije je apstraktna klasa koja je implementirana od strane Android OS-a, odgovorna je za pristup klasama specifičnim za uređaj i aktivnostima vezanim uz sam OS. Primjerice poput pokretanja raznih OS aktivnosti, te rukovanje događajima ili upravljanjem namjerama.


Gumb koji smo definirali u main.xml datoteci adresiramo sa linijom

final Button btn = (Button) findViewById(R.id.MySendSmsButton);

Na gumb sada zakačimo Slušanje događaja klika (EventListener) i kao metodu za izvršavanje definiramo onClick metodu.

btn.setOnClickListener(new Button.OnClickListener() {
   public void onClick(View v) {
         ...
   }
   });

Kako bi osigurali da se slanje SMS-a odvija u novoj dretvi, kako nam se aplikacija ne bi zamrznula, tijekom slanja poruke koristimo Handler objekt koji je za to zadužen. Kod koji će se izvršiti u novoj dretvi definiramo na način

myHandler.post(new Runnable() {
   public void run() {
      // kod koji se izvsrava u novoj dretvi
   }
});

Nakon pritiska na gumbic prije slanja SMS-a ispisujemo kratku poruku na ekran koristeći Toast objekt.

Toast.makeText(myContext,"Slanje ZET SOS poruke :) u tijeku", Toast.LENGTH_LONG).show();

SMS ćemo poslati korištenjem SmsManagera linijom

sms.sendTextMessage("8585",null,"ZG",null,null);

Da bi naša aplikacija bila u potpunosti gotova potrebno je u AndroidManifest.xml datoteci omogućiti našoj aplikaciji da koristi mogućnost slanja SMS-a uređaja na kojem će se izvršavati. Tako će naš AndroidManifest u konačnici izgledati

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="hr.ifnet.SendZetSms"
android:versionCode="1"
android:versionName="1.0">
   <application android:icon="@drawable/icon" android:label="@string/app_name">
      <activity android:name=".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>
   </application>
<uses-sdk android:minSdkVersion="3" />
<uses-permission android:name="android.permission.SEND_SMS" />
</manifest>

I aplikacija je gotova i spremna za izvođenje.

Izvorni kod aplikacije možete preuzeti ovdje


Nastavak

Kako kontrolori ZET-a postaju s vremenom sve brži, u idućem ćemo članku smanjiti broj dodira ekrana kako bi poslali SMS, na način da ćemo uvesti Widgete i SMS poslati direktno sa Home ekrana uređaja.