Mobileszközök programozása Java nyelven

Speciális kiegészítő szabványos könyvtárak

JSR-179 | GPS támogatás

A legtöbb mobiltelefon már képes a műholdas helymeghatározó rendszer segítségével a felhasználó navigálására. Ennek legelterjedtebb felhasználási területe a navigáció, melyre a megírt szoftverek számtalan járulékos szolgáltatást építenek fel, mint pl. útvonaltervezés, környező üzletek, éttermek ajánlása, útvonaladatok statisztikázása.
A J2ME világában a GPS rendszerhez a hozzáférést a javax.microedition.location package biztosítja, a következő osztályokon keresztül:

A javax.microedition.location csomag osztályainak hierarchiája


A GPS-szolgáltatások eléréséhez a programozónak a LocationProvider absztrakt osztályból kell példányt nyernie, mellyel szembeni elvárásait egy Cirteria objektumba csomagolva adhatja meg. A Criteria példányosításakor többek között olyan kritériumok állíthatók be, hogy 2 vagy 3 dimenziós koordinátákkal számoljon vagy hogy szükségünk van-e például sebesség információra. (A félreértések elkerülése végett értelmes lehet a 2 dimenziós térben való számolás is, például egy tó esetében: mivel a vízfelület tengerszint feletti magassága állandó.)
A GPS-rendszer függvényében a programozó elérhet olyan kiegészítő információkat is, mint az adott GPS-pozícióhoz tartozó utca-, település- és egyéb földrajzi nevek vagy például az adott épület neve. Az ilyen információkat a csomag AddressInfo osztálya foglalja keretbe.
További információk

Példakód

Tekintsünk például egy kódrészletet, amely illusztrálja az API használatát. Az alábbi kódrészlet GPS-információkat kér, ahol a szélesség pontosságát 500 méterben, a kapcsolódás időtúllépését pedig 60 másodpercben határozza meg.

Criteria cr= new Criteria();

cr.setHorizontalAccuracy(500);

LocationProvider lp = LocationProvider.getInstance(cr);

Location l = lp.getLocation(60);

Coordinates c = l.getQualifiedCoordinates();

String string;

if(c != null ) {
double lat = c.getLatitude();
double lon = c.getLongitude();

string = "Szélesség: " + lat + "\nMagasság: " + lon;

} else {
string ="Location API hiba";
}

midlet.displayString(string);

További lehetőségek

Az Orientation osztály nyújt lehetőséget az adott tengellyel bezárt szög meghatározására. Alapéertelmezésben az északi iránnyal bezárt szöget teszi elérhetővé, de a programozó igény szerint definiálhat tetszőleges tengelyt. (A használatkor megkülönböztethető például a mágneses és a gravitációs északi irény is.)
A LandMark és a LandMarkStore osztályok segítségével a "nyers" GPS koordinátákhoz rendelhetők például a felhasználók által adott elnevezések (POI).
A LocationListener interfész megvalósításával a programozónak lehetősége nyílik a GPS-adatok frissítési periódusának iráyítására. Az így elkészített alkalmazás rugalmasabban kezeli a műholdak elvesztéséből adódó pontatlanságokat (pl. alagútba hajtás).
A ProximityListener interfész implementálásával a programozó képes adott terület figyelésére, a megadott középponttal és távolsággal.

JSR-234 | multimédia támogatás

A multimédia támogatás az okostelefonok számára teljesen természetes dolog: a felhasználók képesek az általuk készített fényképeket és az internetről letöltött képeket galériába szervezni, címkézni, esetenként akár szerkeszteni is. A fényképkészítést a mai telefonok többsége nem csak digitális zoommal, fényerősség állítási és vakuzási lehetőséggel, hanem vörösszem kiszűréssel és mosolyfelismeréssel is támogatják. A felhasználói hasonlóan lehetőségekben gazdag a videó-készítés, hangfelvétel, illetve akár a zenekészítés terén is.
Természetes tehát a programozók igénye arra, hogy a multimédiás szolgáltatásokat igénybe vehessék.
Ehhez biztosít csatlakozási felületet a javax.microedition.amms.control package, amely a következő osztályokat tartalmazza:

További információk

Példakód

Tekintsünk például egy kódrészletet, amely beállítja a készülék kameráján a zoom-ot és a macro-módot.

import javax.microedition.media.Player;

public class Multimedia {

public final int amountOfZoom = 4;
private Player camera;

public void presetCamera() throws Exception {
//zoom állítása
if (camera.getControl("ZoomControl") != null) {
javax.microedition.amms.control.camera.ZoomControl zc =
(javax.microedition.amms.control.camera.ZoomControl) (camera.getControl("ZoomControl"));

for (int i = 0; i < amountOfZoom; i++) {
zc.setDigitalZoom(zc.NEXT);
}

} else {
throw new Exception("Zoom sikertelen");
}

//fókusz állítása makromódra
if (camera.getControl("FocusControl") != null) {
javax.microedition.amms.control.camera.FocusControl fc = (javax.microedition.amms.control.camera.FocusControl) (camera.getControl("FocusControl"));
fc.setMacro(true);
} else {
throw new Exception("Makromód sikertelen");
}
}
}