Mobila applikationer med Android: Hemtentamen 2015-05-09

Thomas Padron-McCarthy (thomas.padron-mccarthy@oru.se), telefon 070-73 47 013.

(Rättelse: Tidigare stod det fel år i rubriken.)

Instruktioner

  1. Skriv och provkör programmet som beskrivs i uppgiften, och skicka sen in det färdiga programmet till mig (thomas.padron-mccarthy@oru.se) inom 24 timmar, dvs senast klockan 08:00 på söndagen.
  2. Uppgiften ska lösas enskilt, dvs inga grupper av två eller flera studenter.
  3. Du får använda dator, böcker och vilka andra hjälpmedel som helst, men du får inte samarbeta eller fråga någon (utom mig). Exempelvis är det tillåtet att söka och läsa på webbplatser som Stack Overflow, men inte att ställa egna frågor.
  4. Om du behöver fråga något, så kontakta gärna mig. Det är nog bäst att ringa eller SMS:a, för jag kommer kanske inte att sitta vid datorn.
  5. Packa ihop hela katalogen med applikationen i en Zip-fil, och skicka den som en bilaga. (Även rar- och tar-filer fungerar.) APK-filen (Androids kompilerade installationsfil) ska vara med. Men döp först om Zip-filen från nånting.zip till exempelvis nånting.info (inte nånting.txt) för att överlista överambitiösa virusfilter.
  6. Om du inte senast under måndagen får e-post från mig med en bekräftelse på att du skickat in uppgiften, bör du kontakta mig, enklast genom att ringa eller SMS:a mig (ifall det är e-posten som inte fungerar).
  7. Godkänt resultat på den här hemtentan ger betyget G på teoridelen av kursen. För att få hela kursen godkänd krävs dessutom godkända inlämningsuppgifter.

Uppgiften

Vi ska göra en app som mäter avståndet mellan två punkter, fågelvägen, med hjälp av GPS.

Det ska finnas två knappar som man trycker på när man är på respektive punkt. Appen ska lokalisera platsen med GPS, och sen spara den. Man ska kunna ange en ny punkt genom att trycka en gång till på motsvarande knapp.

Så fort man angivit två punkter, ska avståndet mellan dem beräknas och visas på skärmen. Om man byter punkt ska ett nytt avstånd beräknas och visas.

Den här metoden, som är hämtad ur desktop-zombie-klienten, kan användas för att beräkna avståndet mellan två punkter på jordytan:

    private double distance(double lat1, double lon1, double lat2, double lon2) {
        double R = 6371000; // Average radius of the earth in meters
        lat1 = lat1 / 180.0 * Math.PI;
        lat2 = lat2 / 180.0 * Math.PI;
        lon1 = lon1 / 180.0 * Math.PI;
        lon2 = lon2 / 180.0 * Math.PI;
        double dlat = Math.abs(lat1 - lat2);
        double dlon = Math.abs(lon1 - lon2);
        double a = Math.sin(dlat/2) * Math.sin(dlat/2) +
                Math.cos(lat1) * Math.cos(lat2) * 
                Math.sin(dlon/2) * Math.sin(dlon/2); 
        double c = 2 * Math.atan2(Math.sqrt(a), Math.sqrt(1-a)); 
        double d = R * c;
        // System.out.println("*** Distance = " + d + " m");
        return d;
    }


Thomas Padron-McCarthy (thomas.padron-mccarthy@oru.se), 9 maj 2015