Svårt att använda GPS?

Discussion in 'Applikationsutveckling' started by DRo, Oct 15, 2011.

  1. DRo

    DRo Youth Droid Medlem

    Joined:
    Oct 31, 2010
    Messages:
    158
    Likes Received:
    19

    MINA ENHETER

    Hej!

    Vi är fyra killar som går sista året på gymnasiet och vi hade tänkt att göra en träningsapp som projektarbete.

    När jag föreslog träningsapp antog jag att det var tämligen enkelt med distansmätning och sånt i.o.m. Gmaps? Att det bara var att starta en Gmapsgrej i applikationen så skötte den simpla saker som att mäta sträcka, tid och medelhastighet.

    Nu när jag kollat lite på GPS i Android verkar det betydligt krångligare.

    Tror ni att det blir svårt att få till en träningsapp som mäter:
    - Tid
    - Hastighet (km/h)
    - Distans
    - Tempo (min/km)
    ?

    Vi har två års Javaprogrammering i ryggen och har lyckats göra menyn till appen. Man kan gå runt mellan olika activities men när jag skulle börja skyffla in funktioner kom jag att tänka på detta...

    Tack på förhand!
     
  2. foobar17

    foobar17 Kid Droid Medlem

    Joined:
    Jun 12, 2009
    Messages:
    56
    Likes Received:
    11

    MINA ENHETER

    SV: Svårt att använda GPS?

    Den officiella dokumentation för Android lämnar en del övrigt att önska, när man lämnat "hello world" stadiet. Det kan vara ide att google runt lite. En plats som innehåller mycket matnyttigt är stack-overflow.

    Grund principen för att hämta in GPS data är att registrera en LocationListener:
    Code:
    class LocationHandler implements LocationListener {
       void onLocationChanged(Location loc) {
          int lat = (int) (loc.getLatitude() * 1E6);
          int lng = (int) (loc.getLongitude() * 1E6);
          GeoPoint point = new GeoPoint(lat, lng);
    
          //do something with the geo point, e.g.
          theMap.animateTo(point); 
       }
       public void onStatusChanged(String provider, int status, Bundle extras) {}
        public void onProviderEnabled(String provider) {}
        public void onProviderDisabled(String provider) {}
    }
    
    Hos en LocationManager:
    Code:
    LocationHandler callback = new LocationHandler();
    
    LocationManager locMgr= (LocationManager) this.getSystemService(Context.LOCATION_SERVICE);
    locMgr.requestLocationUpdates(LocationManager.GPS_PROVIDER, 0, 0, callback);
    
    Location startLocation = locMgr.getLastKnownLocation(gps);
    
    Via ett Location object, kan ni hämta ut hastighet (getSpeed()) eller om den inte är tillgänglig räkna ut den via
    • distanceTo, tidigare punkt
    • getTime, ta differensen mellan senaste och förra punkt

    En komplikation är att sampla in realistisk GPS data. Här skulle jag rekommendera MyTracks och sedan ut och spring eller cykla. App:en låter en spela in alla GPS punkter och sedan kan ni spara datat som GPX och/eller KML. Via DDMS kan ni sedan spela upp en GPX/KML fil och skicka till en device/emulator.

    Lycka till.
     
  3. Zooklubba

    Zooklubba Android Medlem

    Joined:
    Jul 10, 2010
    Messages:
    6 448
    Likes Received:
    2 199

    MINA ENHETER

    Vill ni slippa programmera själva kan ni alltid ta en titt på MyTracks. Där finns det exempelvis ett bibliotek ni kan använda er av som sköter allt det där åt er.

    I Healthy Heroes har jag skrivit allt själv och det finns vissa problem beroende på enheter. Vissa kan drifta en hel del. Men det beror lite på hur noga man behöver vara, vet att ex MyTracks kan vara ganska fel och även vissa andra appar. Något som vi inte ville ha därav en egen implementation.

    En liten lustig notis är hur klockan på en gps-position kan drifta. Jag har bara stött på problemet på Huawei men där diffade tiden upp till över 1 minut.

    Annars kan ni alltid ta en titt på MyTracks för idéer och inspiration. Minns jag rätt så innehåller MyTracks allt det ni söker. Minns jag rätt så skapar de automatiskt en ny track om tiden är för stor mellan två positioner eller avståndet.

    En sak som man bör tänka på är att inte spela in två positioner irad om avståndet inte har ändrats X mycket, säg 5 meter. För de olika LocationListeners kan ha väldigt olika accuracies. Just GPS brukar vara bra men Wifi kan vara väldigt opålitligt och där kan man, om man vill, få positionen väldigt ofta. Tror ingen löpningstracker använder WiFI.

    Vi testade med WiFi och då blev längden man rörde sig extremt långt och rörelserna var det av en full alika.
     
    Last edited: Oct 15, 2011