Det här är hemtentan som går lördag 7 december 2013 i kursen Mobila applikationer med Android.
Ansvarig lärare är
Thomas Padron-McCarthy
(thomas.padron-mccarthy@oru.se),
telefon 070-73 47 013.
Instruktioner
-
Skriv och provkör programmet som beskrivs i uppgiften,
och skicka sen in det färdiga programmet till mig
(thomas.padron-mccarthy@oru.se)
senast klockan 08:00 söndag 8 december 2013.
-
Uppgiften ska lösas enskilt, dvs inga grupper av två eller flera studenter.
-
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).
-
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 inte att sitta vid datorn.
Under lördagen och söndagen går jag kanske inte heller att nå via telefon.
-
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 för att överlista överambitiösa virusfilter.
-
Om du inte senast under tisdagen (10 december) 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).
-
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
I äldre versioner av Android kunde man inte ställa in tiden noggrannare än på en minut när.
Det gick inte att ställa in sekunderna, annat än genom att först
"roota"
telefonen.
Däremot kan man förstås surfa till en webbsida på en server som visar korrekt tid,
eller hämta tiden via nätet på annat sätt.
Nu ska vi göra en Android-app som kopplar upp sig mot en särskild tidsserver,
hämtar korrekt tid, och presenterar den, tillsammans med hur mycket telefonens tid avviker.
Det går bra att göra den här uppgiften även om man inte gjort inlämningsuppgift 4,
men det är förmodligen lättare om man gjort den.
|
Här är ett exempel på hur appen kan se ut.
Direkt när man startar den kopplar den upp sig mot servern,
så man behöver inga knappar alls.
(Klicka på bilden för att se den i större format.)
Om man vill får man göra en mycket vackrare lösning.
Servern lyssnar på port 2005.
Direkt när den tar emot en uppkoppling svarar den med en tidsrad,
och kopplar därefter ner förbindelsen.
Tidsraden har formatet
DATE 2013-12-06 18:03:24.776 +0100
dvs den börjar med DATE,
därefter kommer dagens datum på formatet år-månad-dag,
därefter tiden på formatet timmar:minuter:sekunder.tusendelar,
och till sist tidszonen, angiven som tidsskillnaden till UTC.
Delarna skiljs åt av mellanslag.
Krav
-
Appen ska hämta den korrekta tiden från basen.oru.se port 2005.
-
Appen ska presentera den korrekta tiden från servern,
minst med timmar, minuter och sekunder.
-
Appen ska också presentera telefonens klockas tid,
minst med timmar, minuter och sekunder.
-
Appen ska dessutom presentera skillnaden mellan serverns och telefonens tid.
Om man vill kan man ange den i form av timmar, minuter, sekunder och tusendelar,
men det räcker att ange den som sekunder.
-
Appen behöver inte kunna hantera olika tidszoner.
Vi förutsätter att telefonen befinner sig i samma tidszon som servern.
-
Appen behöver inte kunna hantera så stora tidsskillnader
att telefonen och servern har olika datum.
-
Appen behöver inte kunna hantera tider kring midnatt,
där telefonen och servern kan råka ha olika datum.
-
Det tar förstås lite tid för tidsraden att färdas genom Internet från servern till telefonen,
så den kommer alltid att vara åtminstone några millisekunder gammal när telefonen får den.
Appen behöver inte kompensera för detta.
Tips
-
Glöm inte android.permission.INTERNET i AndroidManifest.xml.
-
För inloggningen och kommunikationen med servern bör man skapa (minst) en separat tråd
(eller motsvarande).
Gör man alltihop i GUI-tråden får man, på moderna Android-versioner, NetworkOnMainThreadException.
På äldre Android-versioner ser det i stället ut som att appen hängt sig.
-
Man kan ladda ner DaytimeServer och köra på sin egen dator:
DaytimeServer.zip
-
Klassen Calendar kan användas för att få fram aktuell tid,
och dela upp den i olika delar.
-
String.split kan användas för att dela upp en sträng i delar.
Thomas Padron-McCarthy
(thomas.padron-mccarthy@oru.se),
6 december 2013