Suomeksi ääninavigoiva GpsMid: tarkoitus julkaista versio 0.7

Pistänpä tännekin tietoa, että ensi sunnuntaina olisi tarkoitus julkaista uusi versio OSM-dataa käyttävästä, suomeakin osaavasta navigaattorista Java- ja Android -kännyköille. Testiversio on jo käytettävissä, tarkempi ilmoitus alla.

Kyseessä on ohjelma nimeltä GpsMid, joka on vapaa ohjelmisto. Uusia ominaisuuksia edelliseen miltei vuoden takaiseen julkaisuversioon verrattuna on rutkasti. Käyttöliittymä on nyt miltei kokonaan suomennettu, virheilmoituksia on kääntämättä ja ehkä jotain pientä muutakin osaa käyttöliittymässä.

GpsMid käyttää vektorikarttoja jotka luodaan aputyökalun Osm2GpsMidin (java-ohjelma joka pyörii esim. Linuxissa ja Windowsissa) avulla. Kartta voidaan pakata sovelluksen mukaan tai laittaa erikseen puheimen muistikortille. GpsMid osaa neuvoa äänillä suomeksi, saksaksi ja englanniksi, näytöllä näkyviä kieliä on enemmän. Puutteitakin on vielä, toistaiseksi jakeluversio ei osaa esim. navigoida helposti talonumeroihin eikä osaa piirtää merta siniseksi.

Tässä jakeluversiossa ei vielä, mutta erillisessä testiversiossa on myös mm. tuki reittirelaatioiden näyttämiselle, esim. hiihtoreitit, bussireitit ym. Bussireittien avulla reititystä ei vielä ole. Talonumeroihin navigoinnista on myös mitenkuten toimiva kokeiluversio olemassa, ja meren siniseksi näyttämiseenkin on mkgmap:ista lainattua koodia jo mukana, tosin ei vielä toimi.

Hyvin monet asiat ovat GpsMidissä asetettavissa ilman lähdekoodimuutoksia, esim. tietyyppejä ja kohteita (POI, en nyt parempaakaan suomennosta keksinyt, käykää wikissä parantamassa jos keksitte) voi kartalta näyttää ja piilottaa, kartan teiden värejä voi muuttaa tyylitiedostolla, reititysmoodeja voi laatia itse (nyt kävely, pyöräily, auto, lisätä voisi vaikka mopon).

Englanninkielinen julkaisuilmoitus ja uusien ominaisuuksien luettelo: https://sourceforge.net/projects/gpsmid/forums/forum/677687/topic/4046112

Hmm… Android-versio saattaisi kiinnostaakin, kun tuli tuossa hetki sitten Android-puhelin hankittua. Pitääpä kokeilla sitten kun tuo virallisesti julkaistaan.

Android-versiota on helppo testata jo nytkin - http://gpsmid.sourceforge.net/nightlies/ löytyy pari .apk:ta joissa on valmiina pienehkön Helsingin seudun alueen kartta. Lisää karttoja voi ladata osoitteesta http://gpsmid.sourceforge.net/prebuild/ - noita jarreja voi laittaa puhelimen muistikortille ja ottaa GpsMidin valikosta käyttöön, löytyy esim. valmis Suomen kartta. Kaikkein helpoiten saa androidissa käyttöön kun googlaa gpsmid nightly ja lataa sieltä jommankumman .apk:n, ja jos haluaa koko Suomen kartan niin se löytyy googlaamalla gpsmid prebuild.

Pistinpä testiksi latautumaan… Pitää huomenissa ihmetellä tarkemmin.

edit:
Pikaisen testin perusteella heittelee kaikenlaisia virheilmoituksia sillointällöin (oletettavasti siksi kun tökkii nakkisormilla mitä sattuu) ja käyttöliittymä on aika epä-androidmainen joten on hankala käyttää ainakin ZTE Bladella. Kehitettävää Android-versiossa siis piisaa…

edit2:
Vähän pidemmän testin perusteella käyttöliittymä on ainakin Bladella käytettynä kelvoton, kaikki toimii eri tavalla kuin kaikissa muissa Android-ohjelmissa, vaatii ylimääräisiä painalluksia ja kuittauksia jne. GPS:n kanssakin oli taas aluksi pientä taistelua kunnes tajusi että eräs valintakin piti kuitata erikseen Menu->Ok -tyylisellä toiminnolla.

Ja tosiaan tuo sylkee jotain säikeen kaatumisilmoituksia kun käynnistää ohjelman ja GPS onkin off-tilassa, samoin hyvin herkästi sellaisissa tilanteissa kun Android-käyttäjänä olettaa asetuksen vaihtuneen ja menee Back-napilla takaisinpäin.

Itse kartta kyllä näytti latautuvan ja pyörivän kohtalaisesti eli siltä kannalta tuo on ihan jees mutta ei tuota voi käyttää noiden UI:n ongelmien takia.

Androidmaisutta ei todellakaan ole juuri häivääkään - ainoa osittain android-vaikutteinen ominaisuus käyttöliittymässä taitaa olla tuplaklikkaus kartalla zoomausta varten, tosin senkin voi ajatella olevan OSM slippy mapista. Käyttöliittymä on suoraan J2ME-ympäristöstä ja laadittu sellaiseksi että toimii esim. 176*220 -näyttöisillä puhelimillakin. Kuten huomasitkin, kömpelöksi tuo käy androidilla erityisesti ja nimeomaan siinä vaiheessa, kun käyttöliittymän jotain toimintoa ei ole toteutettu kuvakevalikoilla vaan j2me-pehmonäppäimillä/valikoilla(command), jotka android-toteutuksessa löytyvät vasta menu-näppäimen takaa. Nuohan tulevat J2ME-puhelimissa suoraan näytölle näkyviin pehmonäppäiminä, jolloin käyttö on j2me-puhelimissa luontevampaa.

Yleensäkin monessa kohdassa näkyy, että historia on näppäimistöpuhelimissa ja vieläpä numeronäppäimistöllisissä, ja kosketusnäyttötuki on suhteellisen uusi lisäys. Minusta kuvakevalikot toimivat ihan mukavasti, android-käyttöni on sen verran vähäistä etten osaa arvioida kuinka androidmaista tai epäandroidmaista niiden käyttö on, mutta tosiaan sitten “kakkostasolla” iso osa on noita j2me-choicegroup-valikoita / asetuslistoja j2me-command-softkey-hyväksynnöillä jotka ovat kömpelöitä androidilla. Jos ohjeet (https://sourceforge.net/apps/mediawiki/gpsmid/index.php?title=Touchscreen_Layout ) lukee ja/tai kokeilee mitä mitäkin kuvaketta painamalla tapahtuu, niin toisaalta varsin iso osa toiminnoista jo löytyy myös kosketusnäytöltä.

Kukaan ei taida tällä hetkellä olla varsinaisesti esim. android-asetusvalikkokäytöstä tms. androidmaisuuksia tekemässä, mutta jos kiinnostaa että ohjelma kehittyy niin noitahan voi ehdottaa, joku voi kiinnostua tekemään, ehkä minäkin jossain vaiheessa. Ensimmäiseksi ehkä kannattaisi tehdä ok-napit jokaiseen ruutuun, ettei tarvitse ok:ta hakea menu-näppäimellä, niin tai ehkä tuo pitäisi sitten tosiaan android-versiossa muuttaa niin että back-näppäin vastaisi OK:ta jos vain mahdollista, nythän tuo menee j2me:ssä yleisellä logiikalla että “OK” hyväksyy, “Back” palaa takaisin tallentamatta. Oikeastaan jompikumpi noista (ok-napit tai androidin back-napin toiminnan merkityksen muuttaminen) olisi sellainen mitä minäkin voisin jossain vaiheessa tehdä, helpottaisi kuitenkin android-käyttöä aika paljon.

Edit: Teknisesti tuo android-versio toteutuu lähinnä J2MEPolishin android-backendillä, varsinaista android-koodia on erittäin vähän, muutama pieni android-spesifinen pätkä vain, esim. kompassisuunnan luku, taustavalon ylläpito (wakelock) ym. Kokeilin hiukan tuota back-nappia, mutta en oikein löytänyt logiikkaa millä se toimii/ei toimi - jostakin valikosta sillä pääsee takaisin kuten käyttäjä odottaa, seuraavalla kerralla samasta valikosta takaisin yrittäessä taas tuleekin “application killed”. Jossain toisessa valikossa back taas näyttää vievän luotettavasti takaisin, jossain valikossa se taas ei tee yhtään mitään. Minulle ei mitään virheilmoituksia näyttänyt backita tulevan. Osittain back:in toiminta on tietysti J2MEPolishin sääntelemää (ehkä esim. sidottu “Back”-commandiin). Jos sattuu olemaan hiukan pointtereita androidin back-logiikkaan ja ja -tekniikkaan, niistä voisi olla apua tuon back-käytöksen korjaamisessa.

Yksi back-toiminnon ongelmanlähde on ainakin se, että android tappaa reteämmin prosesseja kuin j2me, ja gpsmid ei oikein osaa käsitellä uudelleenkäynnistä tappamisen jälkeen niin kuin pitäisi. En tiedä voiko back-toiminnon kanssa olla säikeiden kanssa jotain samansukuista ongelmaa joka selittäisi satunnaiselta näyttävää käytöstä, siis että android tappaisi säikeen tai tekisi jotain muuta kummaa vain säikeelle kun arvelee ettei sitä enää tarvita.

Juu, ne kuvakevalikot vielä toimii suhteellisen hyvin, tosin välillä tuntui että vaatii useamman painalluksen ennenkuin suostuu hyväksymään painalluksen eli ne ovat kyllä ihan käytettävät mutta ne asetusvalikot… Jotain alle 10px korkuisia rivejä joihin pitäisi jotenkin nakkisormilla osua ja käyttölogiikka ei muutenkaan ollenkaan sovellu kosketusnäytölle. Eli ensimmäisenä nuo asetusvalikot pitäisi saada sellaisiksi että niitä pystyy käyttämään kosketusnäytöllä. Kyllähän nuo nokialaisessa kivasti toimivat kun oli oikeita näppäimiä millä liikkua, valita jne mutta se on aikalailla eri maailma se.

Ei mitään OK-nappeja androidissa suosita, valitaan sopivat asetukset ja back-napilla pois niin hyväksyy automaagisesti. Tuon toteuttaminen jotenkin muuten aiheuttaa vaan sekaannusta ja hämmennystä android-käyttäjien keskuudessa.

Suurin osa noista virheilmoituksista johtui siitä että painoin back-nappia odottamattomasti ja vain osa asetuksien muutoksista oli OK:lla kuitattu eli ohjelma esimerkiksi yritti etsiä bluetoothin kautta gps-mokkulaa vaikka koko bluetooth oli pois päältä tai sisäinen gps oli pois päältä eikä ohjelma osannut tulkita virhetilaa oikein.

Tuosta Androidin muistin- ja sovellustenhallinnasta löytyy aika hyvin juttua netistä mutta pääpiirteissäänhän se toimii samalla tavalla kuin työpöytälinuxissakin. Siinä olevat eroavaisuudet j2me:n kanssa tietty saattavat aiheuttaa kaikkea pientä mielenkiintoista juttua. Kuitenkaan Androidkaan ei turhaan hirveän herkästi tapa prosesseja ellei laitteen resurssit ole vähissä.

Käytännön kokemus on kyllä, että kun ei android wakelockia ollut vielä käytössä eli gpsmid ei kertonut että haluaa pitää käynnissä / näytön päällä / ym. niin heti kun meni näytönsäästäjä päälle niin oli gpsmid hengetön. Siihen seuraavan kerran ohjelmaan mennessä esim. toisen sovelluksen back-napilla käynnistyi gpsmid sitten alkutilasta.

ikeasti toimivien android-sovellustan kanssahan tämä tilan talletus ja palautus ja sillä välillä mahdollisesti tapahtuva prosessien tappaminen ei käyttäjälle näy, no tietysti sitten jos käy prosessilistasta katsomassa. Samoin jos tulee puhelu tai käyttäjän toimilla siirtyy toiseen sovellukseen, lopetti gpsmid toimintansa ja käynnistyi alusta kun siihen palasi. Tämähän kyllä on sinänsä dokumentoitu, sovelluksen tehtävä sitten on talletella tilat jotta osaa käynnistyä uudestaan seuraavalla kerralla siinä tilassa kun käyttäjä odottaa.

Kaiketi jos androidmaisesti hommat tekisi niin pitäisi tehdä service-osa (vai mikä sen nimi nyt olikaan) joka tekee esim. gpx-jäljen loggauksen jos jälkeä logataan ja navigointiohjeet jos reititys on päällä, ja sitten käyttöliittymäosa joka ei ole ajossa kun sitä ei tarvita.

Nuo bluetooth-kilkkeet olisi hyvä nykyaikana muutenkin piilottaa ellei käyttäjä kytke bluetooth-paikkannusta päälle, kun sisäiset ovat kuitenkin niin yleisiä. Oudompi vain turhaan eksyy kokeilemaan “GPS-tunnistusta” joka sitten lähtee bluetoothilla hakemaan gps:ää.

Näköjään tosiaan minunkin puhelimellani tykkää kyttyrää jos yrittää yhdistää gps:ään jos on sekä wlan-paikannus että gps-paikannus puhelimesta kytketty pois. J2MEPolishin JSR179 ei näytä kovin kattavasti toteutetulta, perusasiat toimivat, mutta crashi saattaa johtua tuosta. Jossain vaiheessa kannattaisi varmaan tehdä paikannus android-natiivisti, jospa sieltä saisi jotain tarkempaakin tietoa kuten satelliittien määrän, onko satelliitti- vain wlan-paikannus tms, esim. satelliittien määrä ei JSR179:n kautta androidilla selviä.

Androidille löytyy nyt uusin testiversio 0.7.21 osoitteesta http://gpsmid.sourceforge.net/nightlies/ - back-toimintoa on tehty androidmaisemmaksi, muuten ei erityisemmin ole android-spesifisiä muutoksia.

J2ME:lle julkaisuversio 0.7.2 löytyy osoitteesta https://sourceforge.net/projects/gpsmid/files/gpsmid/Release%200.7.2/ - pikapuoliin tuonne pitäisi tulla myös .jad-tiedostojen (allekirjoitukset), jotta nokialaisilla pääsee eroon lupakyselyistä.