4. MIDLETIT

 

Java™-teknologia rakentuu ohjelmointikielestä ja ohjelmistoalustasta. Java-alusta toimii usean käyttöjärjestelmän kanssa. Puhelinvalmistajat hyödyntävät Java-teknologiaa voidakseen tarjota avoimen laitealustan sovelluskehittäjille. Kaikkien Java API (Application Programming Interfaces) -ohjelmointikielellä luotujen sovellusten pitäisi toimia kaikissa yhteensopivissa laitteissa.

 

Java-alusta tunnetaan nimellä Java Platform. Sen mobiiliversio, Java Micro Edition (Java ME), on puolestaan suunniteltu pienemmille laitteille kuten matkapuhelimille, kommunikaattoreille ja PDA-päätelaitteille. Tällä ohjelmistoalustalla laaditut sovellukset ovat midlettejä, MIDP-päätelaitteessa (Mobile Information Device Profile) eli yleisimmin puhelimessa toimivia Java-ohjelmia.

 

Java-teknologian ansiosta puhelimen käyttäjä voi valita, millaisia sovelluksia hän haluaa puhelimeensa. Kehittäjät voivat mukauttaa sovelluksen käyttöliittymän joustavasti antaen käyttäjälle vapauden ladata juuri sellaisen version kuin hän itse haluaa tai tarvitsee. Käyttäjä voi valita erilaisista muotoiluista ja symboleista omaan tyyliinsä sopivimmat.

 

Esimerkiksi Nokian uudet mobiililaitteet sisältävät Sovellukset -valikon, jonka kautta uusia sovelluksia voi ladata ja tallentaa. Sovelluksia voi hakea WAP-selaimella. Kätevät WAP-kirjanmerkit ja WAP push-viestit tarjoavat käyttäjälle suoran tien Java-sovelluksia sisältäville WAP-sivustoille.

 

Pienikokoiset kännykkään ladattavat Java-sovellukset voivat olla esimerkiksi pelejä tai hyötyohjelmia, eikä niiden tekeminen ole sen vaikeampaa kuin Java-sovellusten yleensäkään. Mobiili-Javasta on jo ilmestynyt kattavia teoksia suomeksikin, joten tässä luvussa luomme vain lyhyen katsauksen siihen, mitä ovat midletti ja MIDP, ja millaisia ohjelmia puhelimille voidaan laatia. Lisäksi teemme pienen esimerkkisovelluksen ilmaisilla Java-työkaluilla.

 

4.1 JAVAN VERSIOT

 

Java-ohjelmointikieli samoin kuin sillä kirjoitettuja ohjelmia suorittava Java-virtuaalikone saivat alkunsa kämmenlaiteprojektista. Nykyisin suurin osa Java-ohjelmista on kuitenkin tehty palvelimille ja työpöytäkoneille. Mutta tilanne on muuttunut, sillä muutaman viime vuoden aikana Java on ollut varsin voimallisesti palaamassa juurilleen.

 

Sun Microsystems jakoi vuonna 1998 ilmestyneen Java 2 -version teknologian kolmeen osaan. Yleisin ja tutuin versio on Java Standard Edition eli JSE, jolla tehdään niin web-sivujen appletteja kuin tavallisia hyötyohjelmiakin. Järeämpään palvelinpuolen ohjelmointiin on Java Enterprise Edition eli JEE, joka sisältää erityisesti tietokantojen ja paremman tietoturvan vaatimia lisäkirjastoja. Meitä kiinnostaa tässä yhteydessä pienlaitteisiin tarkoitettu Java ME, johon perustuvat sekä kännyköiden että pda-laitteiden Java-toteutukset.

 

 

4.2 MOBIILISOVELLUKSET

 

Suurimmat matkapuhelinvalmistajat ovat muutaman viime vuoden aikana tuoneet markkinoille useita kännykkämalleja, joihin voidaan ladata Java-ohjelmia suoritettavaksi puhelimen Java-virtuaalikoneessa. Ensimmäiset puhelimiin tehdyt Java-sovellukset ovat luonnollisesti olleet pelejä.

 

Kännyköiden perussovellusten joukko vaihtelee yleensä mallista riippuen puhelinmuistiosta ja tekstiviestieditorista kalenteriin ja muutamaan peliin. Javaa tukevia kännyköitä on jo käytössä miljoonia, ja sovelluskehittäjät samoin kuin peliohjelmoijatkin saanevat pikaisesti kiinni Javan potentiaalista.

 

Uusimmissa puhelimissa on muistia ja suoritintehoa jo enemmän kuin alkuaikojen mikroissa. Näyttö tosin on pieni, eikä perinteistä näppäimistöäkään monissa ole, mutta esimerkiksi pelien pelaamista se ei suuremmin tunnu haittaavan. Ensimmäiset kännyköihin tehdyt sovellukset ovatkin olleet pelejä. Perinteiset yhden pelaajan äly- ja "lautapelit" ovat jo varsin pelattavia.

 

Kun tuntumaa on saatu viihdepuolelta, tulevat hyötyohjelmat. Erilaisia pörssikurrssi- ja pikaviestisovelluksia samoin kuin mikroselaimia ja kalenteriohjelmia tuli mukaan nopeasti. Java-puhelimista yleensä löytyvä nettiyhteys tuo ohjelmille mahdollisuuden ladata päätelaitteeseen vaikka tv-ohjelmatietoja tai mitä tahansa muuta dataa. Nyt on jo myös gps-satelliittipaikannuksesta saatavia tietoja hyödyntäviä sovelluksia.


4.3 Java ME JA MIDP

 

Java ME voi esiintyä erilaisina pienlaitteille sovitettuina kokoonpanoina. CLDC (Connected Limited Device Configuration) on tarkoitettu vähän muistia ja pienen suoritintehon omaaville laitteille. Tällaisia ovat juuri puhelimet ja pda-laitteet. DCD (Connected Device Configuration) puolestaan vaatii laitteistolta jo vähän enemmän muistia ja suoritintehoa, mutta ei sentään läheskään pc:n tehoa. Tässä luomme katsauksen ensin mainittuun eli kännyköissä käytettyyn CLDC-konfiguraatioon.

 

Java

Java ME:n profiilit määrittelevät tietylle laiteperheelle parhaiten soveltuvan yhdistelmän ominaisuuksia ja ohjelmistorajapintoja, joita ohjelmoijat voivat käyttää kirjoittaessaan sovelluksia. CLDC voi toimia perustana usealle erilliselle profiilille. Toistaiseksi sille on määritelty vain yksi profiili, nimeltään MID Profile (Mobile Information Device Profile). Java-ominaisuuksia kännyköissään tarjoavat puhelinvalmistajat noudattavat tätä profiilia. Se ilmaistaan lyhenteellä MIDP.

 

Java ME:n, kokoonpanojen ja profiilien välinen suhde selviää tarkemmin oheisesta kuvasta. MIDP -versio 1.0 valmistui vuonna 2000 ja on käytössä kaikissa Java-kännyköissä. MIDP -version 2.0 määritys valmistui vuoden 2002 lopulla, ja senkin mukaiset puhelimet yleistyivät käytössä nopeasti.

 

4.4 PUHELINSOVELMA MIDLETTI

 

Java-ohjelmiin liittyvässä sanastossa jokaisen tuntema appletti on nettisivulla toimiva ohjelma ja servletti palvelimella toimiva ohjelma. Tämän mukaan MIDP-päätelaitteessa eli yleisimmin puhelimessa toimiva Java-ohjelma on midletti. Sen englanninkielinen kirjoitusasu on MIDlet. Nuo nimitysten let-päätteet tulevat lähinnä "käytännön kielenhuollosta"; sovellusohjelmaa alunperin tarkoittava application taipui muotoon applet eli pikkuohjelma ja service -sanasta muotoutui servlet eli kevytpalvelu. Siten MIDP-päätelaitteessa toimiva Java-ohjelma on midletti.

 

Midletin suorittamisesta vastaa puhelimeen sovitettu Java-virtuaalikone (KVM), joka yleensä kykenee ajamaan yhtä midlettiä kerrallaan. Kuten pc-ympäristössäkin, virtuaalikone tulkitsee Java-ohjelman tavukoodit suorituksen aikana. Virtuaalikoneen yhteydessä ovat CLDC:n ja MIDP:n valmiit luokkakirjastot, joiden luokkia midletit käyttävät.

 

Kännykkään midletit saadaan joko lataamalla matkapuhelinverkon palvelimelta tai siirtämällä pc:ltä esimerkiksi usb- infrapuna- tai bluetooth -yhteyden avulla. Puhelimen pysyväismuistissa olevia midlettejä hallitaan erillisellä ohjelmalla, jolla niitä voidaan myös poistaa muistista. Midleteille varatun pysyväismuistin määrä on kännyköissä yleensä 30 - 100 kilotavun luokkaa. Tyypillisen midletin koko on 5 - 50 kilotavua. Joissakin puhelinmalleissa midletin koolle on asetettu tietyt rajat. Käytännössä midletien kokoa kannattaa vahtia jo senkin takia, että niiden lataaminen ainakaan gsm-yhteydellä ei ole järin ripeää.


 

4.5 PANNANKO PAKETTIIN

 

Jotta midletit voitaisiin siirtää puhelimeen, ne täytyy pakata jar-tiedostoksi ja niille on tehtävä tekstimuotoinen kuvaustiedosto. Samaan pakettiin voidaan laittaa useitakin midlettejä kokoelmaksi (engl. MIDlet suite), jolloin ne voivat käyttää yhteisiä kuvatiedostoja ja muita resursseja paketin sisältämistä tiedostoista.

 

Midlet-paketit ovat Java-pakkauksista tuttuja jar-tiedostoja. Paketin kuvaustiedosto on jad-päätteinen ja sisältää tietoja kokoelman midleteistä, versioista, tekijästä ja muista määreistä. Paketin ja kuvaustiedoston saa helposti aikaan työkaluohjelmilla, niitä ei tarvitse tehdä erikseen. Syntyvät jar- ja jad-tiedostot sijoitetaan esimerkiksi www-palvelimelle.

 

Ladattaessa midlettiä verkosta kännykkään Java-sovellusten hallintaohjelma lataa jad-tiedoston ja sen ilmoittaman jar-pakkauksen. Latauksen jälkeen midletti tallennetaan puhelimen pysyväismuistiin, josta se voidaan käynnistää sovellushallintaohjelmalla. Selausistunnossa navigoidaan jad-tiedostoon. Tätä varten palvelimen on luonnollisesti osattava lähettää kännykän selaimelle oikea mediatyyppi. Hallintaohjelmalla midletti voidaan myös poistaa puhelimen pysyväismuistista ja päivittää se tarvittaessa uudempaan versioon.

 

Tämän luvun lopussa olevan esimerkkiohjelmamme kuvaustiedosto sisältää joukon MIDP-standardin mukaisia määritteitä; midletin nimen, jar-pakkaukseen osoittavan URLin sekä midlettikohtaisia tietoja:

MIDlet-1: PainoVahti, PainoVahti.png, PainoVahti

MIDlet-Jar-Size: 2312

MIDlet-Jar-URL: PainoVahti.jar

MIDlet-Name: PainoVahti

MIDlet-Vendor: Asko Laurila

MIDlet-Version: 1.0

 

4.6 MIDLETIN KÄYTTÖLIITTYMÄ

 

Java-ohjelmoija voi MIDP:n avulla tehdä midletille yksinkertaisen mutta toimivan käyttöliittymän. MIDP:n käyttöliittymä on nimeltään LCDUI (Lowest Common Denominator User Interface). Siihen on tarkoituksella valittu vain joukko sellaisia peruskomponentteja, jotka suurin osa puhelinvalmistajista kykenee laitteissaan toteuttamaan, koska komponentit ovat todennäköisesti jo muutenkin käytössä puhelimen omissa ohjelmistoissa. Pyrkimys on saada Java-ohjelma muistuttamaan mahdollisimman pitkälle kännykän muita ohjelmia, jotta käyttäjän ei tarvitsisi opetella erilaisia käyttöliittymiä.

 

LCDUI toimii käsitteellisesti suhteellisen korkealla tasolla. Siinä on vain kymmenen erilaista näyttökomponenttia, joilla rakennetaan ohjelman tarvitsema käyttöliittymä. Komponentit ovat ohjelmoijan käytössä Java-luokkina, jotka löytyvät pakkauksesta javax.microedition.lcdui. Lisäksi on käytettävissä valikoima matalan tason grafiikanpiirto-ominaisuuksia. Esimerkiksi useimmat pelit käyttävät korkean tason käyttöliittymää harvoin; kaikki peliruudulla näkyvä saatetaan tehdä piirtämällä suoraan näytölle. Tällöin omat grafiikkarutiinitkin täytyy luonnollisesti kehitellä itse.


 

Hyötyohjelmissa tyydytään yleensä karuun ilmeeseen. Käyttöliittymä perustetaan usein lomakkeen eli Form-luokan varaan. Lomakkeelle voidaan kätevästi lisätä tekstiä ja kuvia. Lomakkeen lisäksi korkean tason komponentteja ovat lista (List), tekstimuokkain (TextBox) ja käyttäjälle annettava ilmoitus (Alert). Kaikki nämä näkyvät aina koko ruudun kokoisina, kuten myös grafiikan piirtämiseen tarkoitettu piirtopinta (Canvas).

 

Käyttöliittymän kuhunkin näyttöön voi liittyä useita komentoja, jotka saadaan käyttöön painamalla puhelimen toimintonäppäimiä. MIDP-ohjelma ei kuitenkaan määrää, mitä kustakin näppäimestä tapahtuu, koska näppäintoiminnot saattavat vaihdella puhelinten välillä. Hyvin tehty midletti ei myöskään tee olettamuksia sen suhteen, millaisessa laitteessa sitä suoritetaan.

 

4.7 PAINOVAHTI

 

Midletti koostuu yhdestä tai useammasta Java-luokasta. Pääluokka täytyy periyttää luokasta javax.microedition.midlet.MIDlet. Sen metodeja kuormittamalla eli ylimäärittelemällä midletti saadaan sovitetuksi käyttöliittymään halutulla tavalla. Ohjelmoija voi tehdä myös omia apuluokkia, ja vaikka uusia Canvas-luokkaan perustuvia käyttöliittymäkomponentteja. Kaikki midletin tarvitsemat luokat pakataan samaan jar-tiedostoon.

 

Yksinkertaisen, puhelimessa toimivan Java-ohjelman tekemiseen ei vaadita järin valtaisaa ponnistusta. Esimerkkiohjelmamme lähdekooditiedoston pituus on alle 80 ohjelmariviä.

 

import javax.microedition.lcdui.*;

import javax.microedition.midlet.*;

 

public class PainoVahti extends MIDlet implements CommandListener {

    private Display display;

    private Form inputForm;

    private TextField heightField;

    private TextField weightField;

    private Command exitCommand;

    private Command showCommand;

    private Alert message;

   

    public PainoVahti() {

        display = Display.getDisplay(this);

        message = new Alert("");

        inputForm = new Form("Omat tiedot");

       

        heightField = new TextField("Pituus (cm):", "", 3, TextField.NUMERIC);

        inputForm.append(heightField);

       

        weightField = new TextField("Paino (kg):", "", 3, TextField.NUMERIC);

        inputForm.append(weightField);

 

        exitCommand = new Command("Sulje", Command.EXIT, 1);

        showCommand = new Command("Laske", Command.SCREEN, 1);

        inputForm.addCommand(exitCommand);

        inputForm.addCommand(showCommand);

        inputForm.setCommandListener(this);

    }


 

    public void startApp() {

        display.setCurrent(inputForm);

    }

 

    protected void pauseApp() {

    }

 

    protected void destroyApp(boolean unconditional) {

    }

   

    private void exit() {

        destroyApp(true);

        notifyDestroyed();

    }

   

    public void commandAction(Command c, Displayable d) {

        if (c == exitCommand) {

            exit();

        }

        else if (c == showCommand) {

            try {

                int heightValue = Integer.parseInt(heightField.getString());

                int weightValue = Integer.parseInt(weightField.getString());

                int bmi = getBodyMassIndex(heightValue, weightValue);

                message.setType(AlertType.INFO);

                message.setString("Painoindeksi: " + Integer.toString(bmi));

Painoindeksi

            }

            catch (NumberFormatException nfe) {

                message.setType(AlertType.ERROR);

                message.setString("Numerovirhe");

            }

            catch (IllegalArgumentException iae) {

                message.setType(AlertType.ERROR);

                message.setString(iae.getMessage());

            }

            display.setCurrent(message, inputForm);

        }

    }

   

    private int getBodyMassIndex(int height, int weight) {

        if (height <= 0 || weight <= 0) {

            throw new IllegalArgumentException("Ei negatiivisia lukuja!");

        }

        return ((weight * 10000) / (height * height));

    }

}

 

Jos käytämme midletin rakentamiseen Sunin Java ME Wireless Toolkitia, perustetaan ensin uusi projekti napsauttamalla New Project -painiketta ja syötetään asetukset. Näin syntyy uusi projektihakemisto C:\WTK20\apps\PainoVahti (jos WTK:n asennuksessa on käytetty oletushakemistoa). PainoVahti.java sijoitetaan projektihakemiston alla olevaan src-hakemistoon.

 

Projektin asetukset säädetään napsauttamalla WTK:n Settings-painiketta ja täydentämällä tarvittavat kohdat. Näin ohjelma on valmis käännettäväksi. Se onnistuu Build-painikkeella, ja samalla syntyy tarvittava jar-pakkaus. Saman voi tehdä Project-valikon Build -komentoa käyttäen.

Nyt ohjelma voidaan suorittaa jollakin WTK:n mukana tulevista emulaattoreista (tai WTK:hon liitetyillä puhelinvalmistajien emulaattoreilla). Valitaan sopiva emulaattori Device-pudotusvalikosta, ja haetaan emulaattorilla projektin bin-kansiosta jad-tiedosto. DefaultGrayPhone ja DefaultColorPhone ovat pelkistettyjä MIDP-laitteita, jotka eivät suoraan vastaa yhdenkään valmistajan puhelimia. Niillä saa kuitenkin hyvän käsityksen siitä, miten ohjelman logiikka toimii.

 

Laske -käskyllä emulaattori vilauttaa ohjelman laskeman painoindeksin ja heläyttää samalla äänimerkin. Emulaattorin näyttö palautuu samantien tietojen syöttö -sivulle. Sovellus pysäytetään Sulje-käskyllä.

 

4.8 PAREMPIA MIDLETTEJÄ

 

Painovahti on varsin yksinkertainen harjoitelma, mutta tekee hyödyllisen laskutoimituksen käyttäjän puolesta. Useimmat Java-puhelimiin saatavilla olevat midletit ovat toiminnoiltaan huomattavasti kehittyneempiä, ja valikoimaakin alkaa jo olla runsaasti. Internetistä löytyy useita midlettejä tarjoavia sivustoja.

 

Puhelimeen midlettejä lataavan kannattaa muistaa, että vaikka niiden pitäisi periaatteessa toimia kaikissa MIDP-laitteissa, koodaajien joukko on perin kirjava ja ohjelmiin -varsinkin peleihin-  väsätään eri versioita eri puhelinvalmistajien malleille, näyttöjen erilaisuudesta johtuen. Yhteensopimattomuus johtuu myös siitä, että ohjelmoijat eivät viitsi tai osaa suunnitella midlettejä siirrettäviksi. Joidenkin ominaisuuksien osalta kännykät voivat poiketa toisistaan niin paljon, että eri version tekeminen onkin perusteltua.

 

Ladattavien midlettien kokoa on monissa kännyköissä rajoitettu. Syynä tähän voi olla joko käytettävä siirtotekniikka tai suhteellisen pieni midleteille varattu muistin määrä. Ensimmäisen sukupolven midletit ja Java-puhelimet jättivätkin vielä reippaasti petrattavaa, mutta tarjonta paranee kaiken aikaa. Paremmilla midleteillä riittää potentiaalia.


 

4.9 LINKKEJÄ

 

4.9.1 Ohjelmointi

 

Sun Microsystems julkaisee säännöllisesti artikkeleita MIDP-ohjelmoinnista Java ME TechTips -uutiskirjeinä, joita voi lukea myös webissä osoitteessa http://java.sun.com/developer/J2METechTips/

 

MicroJava.com on puolueeton Java ME -ohjelmointiin keskittynyt verkkosivusto osoitteessa http://www.microjava.com/, joka myös toimittaa uutiskirjeitä.

 

Nokian sovelluskehittäjille tarkoitettu portaali Forum Nokia osoitteessa www.forum.nokia.com sisältää työkalujen ja emulaattoreiden lisäksi esimerkkiohjelmia ja artikkeleita.

 

Bill Day on yksi Java ME -ohjelmoinnin pioneereista ja pitää yllä omaa Java ME Archive-sivustoa osoitteessa http://billday.com/j2me/

 

5.9.2 Ladattavia midlettejä

 

MIDlet Central (http://www.midletcentral.com/) oli yksi ensimmäisistä midlettien latauspaikoista webissä (edellyttää ilmaista rekisteröintiä). MIDlet Review (http://www.midlet-review.com/) puolestaan sisältää mobiilipelien arvosteluja.

 

Suomalaisista operaattoreista monet tarjoavat Javalla tehtyjä mobiilipelejä puhelimiin.

 

Suomalaiset pelitalot Sumea (http://www.sumea.com/) ja Mr. Goodliving (http://www.mrgoodliving.com/) tunnetaan värikkäistä Java-peleistä.

 

<< Alkuun | etusivu | sisällys | työkaluohjelmat | wml | xhtml


Sivun alkuun