Hirdetés

Alkalmazásfejlesztés badára: Koordináták lekérése

A mai bejegyzésben a címnek megfelelően helykoordinátákat fogunk lekérdezni, amelyhez akár a beépített GPS-vevőt is használhatjuk. Csapjunk is bele!

A lekéréshez kapcsolódó függvények az Osp::Locations névtérben találhatóak, ennek használatához be kell include-olni az FLocations.h headert is. Ezen kívül a manifest.mf fájl tartalmát is módosítanunk kell, lévén a GPS chip adatait akarjuk használni; ehhez a privilégiumlistát az alábbi attribútummal kell kibővíteni:

A fenti lépésekkel megteremtettük a koordináták lekéréséhez szükséges előfeltételeket, már csak kódolnunk kell. A lokalizációt végrehajtó osztályunkat le kell származtatnunk az Osp::Locations::ILocationListener interfésztől, amely két listener típusú függvény implementálását vonja maga után. Az egyik az OnProviderStateChanged (Osp::Locations::LocProviderState newState), a másik metódus pedig az OnLocationUpdated(Osp::Locations::Location& location); előbbi a  állapotának megváltoztatását, a másik pedig a frissítéseket figyeli, a mai bejegyzésben az utóbbival foglalkozunk.

A koordináták lekéréséhez fel kell vennünk egy LocationProvider példányt, amely a periodikus lekérdezésért felelős. Az inicializálása badás konvenció szerint egy kétfázisú konstruktorral történik, a lekérdezés módját pedig a Construct() függvényben adhatjuk meg. Ez három fajta lehet:

  • LOC_METHOD_GPS : a GPS vevőt használja
  • LOC_METHOD_WPS : WiFi- és cella-alapú
  • LOC_METHOD_HYBRID : az előző kettő kombinációja

Ez után megadása után meg kell adnunk a lekérdezési intervallumot, azaz hogy az alkalmazásunk milyen gyakran kérje le a koordinátákat, amit a RequestLocationUpdates() metódussal tehetünk meg. A feladat nagyobb részével meg is vagyunk, már csak a megfelelő listener törzsét kell megírnunk. Mint említettem, én az OnLocationUpdated() függvényt használtam, ami bemenőként kap egy Location példányt. Ez tartalmazza a koordinátákat, amelyeket a GetQualifiedCoordinates() függvénnyel kérhetünk el. A kapott osztály double értékként tárolja a szélességi és hosszúsági köröknek megfelelő számokat, viszont az ember valószínűleg szívesebben gondolkodik fokban, szögpercben és szögmásodpercben, érdemes is áttérni ezekre. A konverzió végrehajtásához szerencsére kapunk egy beépített függvényt a Convert() személyében, aminek még az eredményt tartalmazó String formátumát is megadhatjuk, ez lehet DD_MM (fok és szögperc), vagy DD_MM_SS (itt szögmásodpercet is kapunk).

Az emulátoron való tesztelés menete egy csöppet eltér az eddig megszokottaktól: első körben engedélyeznünk kell a GPS használatát az emulátoron (ezt a beállítások menü megfelelő pontjában tehetjük meg), majd pedig be kell táplálnunk magukat a koordinátákat. Utóbbihoz az Event Injectort kell használnunk (jobb gomb az emulátoron, lásd kép), az értékeket pedig a Location menü Location Data pontjában adhatjuk meg. Erre három lehetőségünk van: feltölthetünk egy speciális log-fájlt, bejelölhetjük a helyet a térképen, valamint a koordináták beírására is lehetőség van.

A példaalkalmazás természetesen ismét elérhető a Mobilarénás SVN-ből, a jövő heti bejegyzések pedig szintén a Locations névtérrel fognak foglalkozni.

dr. Kind

Azóta történt

Előzmények