Infotainment System

Transcription

Infotainment System
HPR/D-2015/001 INFOTAINMENT-SYSTEM
Infotainment System
HPR/D-2015/001
av
Christian K Haraldseid, Mikal Svendsen
Bachelorrapport for DAT 304 våren 2015
Veileder: Christian Auby, Halvard Øysæd
Fakultet for teknologi og realfag
Universitetet i Agder
Grimstad, Mai 2015
Status: Endelig
Nøkkelord: Android, Fjernstyring, GPS, Mobilt internett, Informasjonstavle
Resymé: Prosjektet tar sikte på å lage en komplett løsning for et informasjonssystem til bruk i
transportsektoren, primært til bruk i buss. Løsningen skal presentere brukeren med informasjon
naturlig for reisen, slik som rutetider, ankomst og posisjon. I tillegg skal løsningen være modulbasert slik at andre tilleggsfunksjoner som nyheter, reklame og lignende kan implementeres.
Løsningen er utviklet for Android-plattformen, og skal kjøres på større skjermer i kjøretøyet. Ingen
interaksjon er krevd av bruker, og systemet er designet for ekstern styring. Større utfordringer
som variabel internett- og GPS-tilgang har vært fokusområde. Forskjellige strategier er tatt i bruk,
blant annet bytting av nevnte moduler i områder uten god dekning, samt mellomlagring og
utnyttelse av variabler som allerede er kjent. Resultatet er en løsning som effektivt håndterer
nevnte problemer på en grei måte uten at brukeren selv opplever utfall av tjenester.
Side 1
HPR/D-2015/001 INFOTAINMENT-SYSTEM
Forord
Denne rapporten er skrevet som hovedoppgave (bachelor-oppgave) i faget DAT304 ved
Universitet I Agder, på linjen Datateknikk. Oppgaven, og/eller problemstillingen er levert av Red
Rock A/S som en konseptutredelse, for å utforske mulighetene for å utvide et allerede eksisterende
billettsystem kalt «TOGITAL». Infotainment-System (dette prosjektet) er da en tiltenkt utvidelse av
det eksisterende systemet som en totalløsning beregnet mot transportsektoren. Utviklingen foregår
primært på Universitetet / Privat under oppfølging av oppdragsgiver.
Prosjektdeltagerne ønsker å rette en spesiell takk til Chief International Officer Eirik Vika og Chief
Project Officer (IT & Consulting) Morten Rønning ved RedRock for god veiledning, og anskaffelse av
nødvendig utstyr i prosjektperioden.
En takk rettes også til universitetslektor Christian Auby og universitetslektor Halvard Øysæd, for god
veiledning under hele prosjektperioden.
I tillegg ønsker gruppen å takke Espen R Nedrebø for retting og korrekturlesning.
Grimstad
27 Mai 2015
Christian K Haraldseid
Mikal Svendsen
Side 2
HPR/D-2015/001 INFOTAINMENT-SYSTEM
Innhold
1 Innledning ................................................................................................................................................... 5
1.1 Bakgrunn .............................................................................................................................................. 6
1.2 Problemdefinisjon ................................................................................................................................. 7
1.2.1 Mål ................................................................................................................................................ 7
1.2.2 Detaljspesifiserte mål .................................................................................................................... 7
1.3 Forutsetninger og begrensninger ......................................................................................................... 9
1.3.1 Avgrensninger ............................................................................................................................... 9
1.3.2 Forutsetninger ............................................................................................................................... 9
1.4 Problemløsning..................................................................................................................................... 9
1.4.1 Prioritet A (Høy) ............................................................................................................................. 9
1.4.2 Prioritet B (Middels) ...................................................................................................................... 9
1.4.2 Prioritet C (Lav) ............................................................................................................................. 9
1.4.3 Verktøy ........................................................................................................................................ 10
1.5 Løsningsstrategi ................................................................................................................................. 10
1.6 Rapportstrukturen ................................................................................................................................11
2 Teknisk bakgrunn .................................................................................................................................... 12
2.1 Android ............................................................................................................................................... 12
2.2 Grunnprinsipper .................................................................................................................................. 12
2.3 Rammeverk og innebygde funksjoner ................................................................................................ 13
3 Løsningsforslag ....................................................................................................................................... 15
3.1 Hardware ............................................................................................................................................ 15
3.2 Produktdesign .................................................................................................................................... 16
4 Løsning ..................................................................................................................................................... 19
4.1 Enhet / Hardware ............................................................................................................................... 19
4.2 Applikasjon ......................................................................................................................................... 20
4.3 Kartmodul ........................................................................................................................................... 22
4.3.1 Teknologi ..................................................................................................................................... 22
4.3.2 Krav ............................................................................................................................................. 22
4.3.3 Komponenter............................................................................................................................... 23
4.3.4 Virkemåte .................................................................................................................................... 24
4.3.5 Forbedringer................................................................................................................................ 25
4.3.6 Drøfting ....................................................................................................................................... 25
4.4 Rutemodul .......................................................................................................................................... 26
4.4.1 Teknologi ..................................................................................................................................... 27
4.4.2 Krav ............................................................................................................................................. 27
4.4.3 Komponenter............................................................................................................................... 28
3.4.4 Virkemåte .................................................................................................................................... 30
4.4.5 Forbedringer................................................................................................................................ 31
4.4.6 Drøfting og testing ....................................................................................................................... 31
4.5 Nyhetsmodul....................................................................................................................................... 32
4.5.1 Teknologi ..................................................................................................................................... 32
4.5.2 Krav ............................................................................................................................................. 32
4.5.3 Komponenter ............................................................................................................................... 32
4.5.4 Virkemåte .................................................................................................................................... 33
4.5.5 Drøfting og testing ....................................................................................................................... 33
4.6 Mediamodul ........................................................................................................................................ 34
4.6.1 Teknologi ..................................................................................................................................... 34
4.6.2 Krav ............................................................................................................................................. 35
4.6.3 Komponenter............................................................................................................................... 35
4.6.4 Virkemåte .................................................................................................................................... 38
4.6.5 Forbedringer................................................................................................................................ 39
4.7 Server ................................................................................................................................................. 40
4.7.1 Teknologi ..................................................................................................................................... 40
4.7.2 Krav ............................................................................................................................................. 40
4.7.3 Virkemåte .................................................................................................................................... 40
Side 3
HPR/D-2015/001 INFOTAINMENT-SYSTEM
4.7.4 Komponenter............................................................................................................................... 41
4.7.5 Forbedringer................................................................................................................................ 43
4.7.6 Drøfting og testing ....................................................................................................................... 43
5 Diskusjon .................................................................................................................................................. 45
6 Konklusjon ............................................................................................................................................... 46
Bibliografi .................................................................................................................................................... 47
Figurer.......................................................................................................................................................... 49
Vedleggs liste .............................................................................................................................................. 50
Vedlegg A - Terminlogi .............................................................................................................................. 50
Vedlegg B - Designutvikling...................................................................................................................... 50
Vedlegg C - Møtereferater ........................................................................................................................ 50
Vedlegg D - Gannt .................................................................................................................................... 50
Vedlegg E - Timelister .............................................................................................................................. 50
Vedlegg F - Forstudierapport................................................................................................................... 50
Vedlegg G - Pressemelding...................................................................................................................... 50
Vedlegg H - Bidragsytelse ........................................................................................................................ 50
Eksterne ressurser ..................................................................................................................................... 51
Simple-Rss2-Android ........................................................................................................................... 51
Bootstrap .............................................................................................................................................. 51
Vedlegg ........................................................................................................................................................ 52
Side 4
HPR/D-2015/001 INFOTAINMENT-SYSTEM
1 Innledning
Prosjektet ble i Januar 2015 tildelt undertegnede studenter av RedRock. Målet med prosjektet var
å utvikle en plattform for visning av informasjon til brukere av offentligtransport, og spesielt tiltenkt
busstransport. RedRock er allerede godt inne i markedet IT og transport, og ønsket å utvide et
eksisterende billettsystem med «infotainment-muligheter», altså presentasjon av informasjon
under transport. I dette tilfelle gjaldt det visning av informasjon på en større skjermflate fastmontert
i kjøretøyet. Lignende løsninger finnes allerede, men et av hovedmålene ved prosjektet var at det
skulle være kostnadseffektivt. Dette betød at enhetene som skulle brukes måtte være billige,
samtidig som de måtte tilfredsstille kravene som ble satt for systemet. Eksisterende systemer var
gjerne dyre, og RedRock ønsket å kunne tilby kundene sine et rimeligere alternativ for å oppnå et
konkurransefortrinn i markedet.
I oppgaveutlysningen ble det også satt krav til funksjoner som burde implementeres, blant annet
var det ønskelig med sporing på kart, estimat mellom rutepunkter (holdeplasser), nyheter, reklame
og fjernstyring. Det ble tidlig klart at systemet måtte kunne operere uten tilsyn, slik at unødvendige
utgifter til teknikere kunne unngås. Dette betød i praksis at systemet måtte ha en form for styring
eksternt, altså en eller annen form for kontrollpanel.
Løsningsstrategien ble utformet på bakgrunn av kravene som ble stilt, et av hovedkravene var
kostnad. Det ble tidlig klart at en normal datamaskin var uaktuelt, da prisen for slikt utstyr ble for
høy per enhet. Løsningen måtte da være mindre kostbare enheter, gjerne minimaskiner som
«Raspberry-pi» og lignende. Prisen per enhet ville da synke betraktelig. Utviklingen innen dette
segmentet med teknologi har utviklet seg mye den siste tiden, og markedet har mange løsninger
som gjør utførelse av prosjektet mulig.
Side 5
HPR/D-2015/001 INFOTAINMENT-SYSTEM
1.1 Bakgrunn
Infotainment er et utbredt konsept, vi finner det i fly, buss, tog og holdeplasser med mer. Det finnes
utallige løsninger på markedet i mange kategorier, fra totalløsninger til simple reklameskjermer.
Når det kommer til funksjonalitet, er mange av løsningene like, som hovedkategori kan en forvente
å finne reklame, rute-informasjon og eventuelt instruksjonsvideo / underholdning. I forprosjektperioden har gruppen slitt med å finne fullgode norske alternativer. Dette har gjort det vanskelig å
sammenligne kostnader, funksjonalitet og tilpasning da en eventuell utenlandsk versjon må
importeres, oversettes og installeres.
I Danmark finnes et selskap ved navnet «adibus» [1] som leverer en løsning tilsvarende det vi
ønsker. Selskapet har ikke oppgitt priser på sin løsning, og heller ikke hvilken maskinvare som
brukes. En løsning som beskrevet blir for vår del et prosjekt startet med blanke ark, det finnes
ingen god bransjestandard eller løsning som kan benyttes. Det gir oss derfor full frihet til å finne,
implementere og utvikle en egen løsning.
Teknologimarkedet har lenge beveget seg mot mindre enheter, mer kraft og større fleksibilitet innen
programvare og operativsystem. I takt med økende valgfrihet i markedet har også prisene på
mindre datamaskiner stupt. [2] IoT eller «Internet of Things» er stikkord som er verdt å merke seg.
Drøyt oppsummert snakker vi om intelligente sensorer og mindre maskiner som samler data og er
koblet til internett. En av hovedformålene med IoT er billige enheter med lavt forbruk. Eksempler
varierer fra en enkel internett-tilkoblet temperatursensor, til kraftigere alternativer som RaspberryPI og HummingBoard [3]. Sistnevnte enheter er mindre datamaskiner som har støtte for større
operativsystemer som Android, Ubuntu og lignende [4]. De støtter skjerm, har USB muligheter, og
annet du forventer av en moderne maskin, dog med mindre kraft og fysisk størrelse.
Da prosjektet tar sikte på å benytte en enhet som beskrevet over, åpner dette en diskusjon
vedrørende teknologien som skal brukes i utviklingen. Gruppens medlemmer har i tidligere
prosjekter utviklet kart og sporingsløsninger ved hjelp av Google sitt Android operativsystem.
Android er et operativsystem basert på Linux-plattformen, primært utviklet av Google sammen med
mange store telekommunikasjons-leverandører og er primært et operativsystem for mobiltelefoner.
I senere tid har Android også beveget seg inn i andre markeder, som bil (Android Auto),
smartklokker (Android Wear), og TV-løsninger (Android TV). [5] [6] [7] Dette skaper et økosystem
som bør passe vårt prosjekt ypperlig. Android gir utviklerne tilgang til veletablerte rammeverk og
funksjonaliteter når det kommer til GPS, Internett, grensesnitt med mer.
Side 6
HPR/D-2015/001 INFOTAINMENT-SYSTEM
1.2 Problemdefinisjon
Prosjektet har som mål å utvikle et totalt informasjonssystem til bruk i transportsektoren. Produktet
har som mål å tilby kunden et rimelig, enkelt og effektivt system. Prosjektet bygges rundt små
enheter (SoC1) som skal plugges i en TV-skjerm i det aktuelle kjøretøyet og skal informere
passasjerene om ting som: Neste holdeplass, kart med estimert rute, reklame, video med mer. Det
er plukket ut noen moduler som en ønsker å få ferdig innen prosjektperiodens slutt. Dette er
beskrevet mer utdypende i et senere avsnitt (ref kap 3). Systemet er planlagt integrert med Red
Rock sitt eksisterende billettsystem.
1.2.1 Mål
MÅL Problemdefinisjon
ML1 Finne en enhet som har riktig pris og kvalitet. Dette er et viktig tema da prosjektets
eksistens baserer seg på et billig produkt som kan konkurrere i et allerede eksisterende
marked.
ML2 Utvikle en komplett prototype basert på kravspesifikasjonen, modulbasert
utvikling klar til prototype-test for å bevise at konseptet er mulig å gjennomføre.
ML3 Holde kodebasen ryddig, strukturert, kommentert og effektiv.
ML4 Holde Jira oppdatert med problemer / oppgaver samt følge scrum-metodikken og
bruke mulighetene verktøyene gir.
(ML1 og ML2 er satt av Red Rock, ML3 og ML4 er definert av prosjektdeltagerne)
1.2.2 Detaljspesifiserte mål
ML1
Et av hovedformålene med prosjektet er muligheten til å føre prisgunstig konkurranse mot andre
aktører på markedet. Det finnes lite informasjon rundt lignende løsninger, men Ruter med flere har
lignende løsninger i sine kjøretøy. Det er etterspørsel fra det eksisterende kundenettverket til
RedRock som sammen ber om en billig, men funksjonsrik løsning. Dette er motivasjonen bak hele
prosjektet, samtidig som det passer godt med det eksisterende økosystemet RedRock har etablert
innen billett- og rutesystem.
For å kunne realisere ambisjonene trengs nytenking på området, en kan ikke bruke dyrere fastvare
som en x86 prosessor med masse kraft, minne og ressurser. For at prosjektet skal lykkes må det
finnes en enhet som kan gi grei ytelse til en billig penge.
ML2
I løpet av prosjektperioden tar gruppen sikte på å utvikle en løsning fra start til slutt, produktet skal
være klart for fremvisning og inneha basisfunksjoner som kan bevise til oppdragsgiver at konseptet
fungerer, selv på lav-kostnads enheter. Det er et ønske at funksjonene skal være modulbaserte.
På denne måten kan løsningen enkelt utvides med ny funksjonalitet uten at dette krever en større
omskriving av koden.
ML3
Prosjektdeltagerne ønsker en oversiktlig kodebase, som enkelt kan utvides ved senere anledning.
Om konseptet skal bygges videre på senere, er det en stor fordel om koden er strukturert ryddig
og grei. For å nå dette målet skal gruppen holde seg til standarder innen språket, slik som
navnekonvensjoner, derunder funksjonsnavn, variabelnavn og så videre. Kommentarer skal
brukes på en god måte, det skal forklares hvordan og ikke hvorfor. Det er også et delmål at
kodebasen skal holdes effektiv, dette for å kompensere for manglende kraft i enhetene som skal
brukes.
Side 7
HPR/D-2015/001 INFOTAINMENT-SYSTEM
ML4
Som utviklingsverktøy brukes Atlassian JIRA og Atlassian STASH. Dette er prosjektplanleggingverktøy som gir utvikleren god kontroll over flyten i prosjektet. STASH er egentlig bare et GIT
repository, lignende GitHub2 og andre sider basert på GIT-systemet. GIT er et
kontrollversjonssystem, det holder kontroll på filene i prosjektet, og lar deg hente tilbake gamle
versjoner av filer, samtidig som det effektivt lar deltagere i et prosjekt dele endringer med
hverandre. Fordelen med dette er at det er mulig for flere å jobbe sammen på samme prosjekt
uten at en manuelt må holde kontroll på alle endringer. Det gir også mulighet for å gå tilbake til
eldre versjoner, blande sammen to ulike versjoner, eller opprettholde ulike versjoner for ulike
formål innenfor den samme kodebasen.
JIRA er et kontrollsystem for feil, forbedringer og endringer. En kan se på JIRA som en
elektronisk liste over ting som skal gjøres med et prosjekt. Listen har gjerne en dato for når en
gitt oppgave skal være ferdig, samtidig som den støter delegering av problemer til hver enkelt i
gruppen. JIRA gir en også mulighet til å overvåke produktiviteten i gruppen gjennom estimater,
grafer og statistikk.
Det finnes flere bruksmønstre en kan benytte sammen med JIRA, i dette prosjektet skal en bruke
Scrum, som er en utviklingsmetodikk tett integrert i JIRA. En typisk Scrum-sesjon foregår på
følgende måte: Gruppen setter en Sprint, en sprint er et sett med oppgaver som skal utføres på
en gitt tid, i Scrum er dette typisk 1-4 uker. Når en ny Sprint lages diskuterer prosjektgruppen hva
som skal være med av oppgaver. Oppgavene legges i en «backlog» i prioritert rekkefølge og
dras opp i den aktive Sprinten. Sprinten får så en sluttdato og prosjektperioden begynner. I
perioden drar utviklerne de ulike oppgavene fra «Start» til «I arbeid» og slutter med «Ferdig».
Målet er å ferdigstille alle oppgavene i «Start-kolonnen» innen den inneværende Sprinten er
ferdig. Oppgaver som ikke er utført går tilbake i «backlog» og tas med på nesten Sprint. På
denne måten deles store oppgaver inn i flere små over en kort tidsperiode. Slik fortsetter
utviklingen til produktet er ferdig.
Figur 1: Illustrasjon over SCRUM arbeidsteknikk. [8]
Side 8
HPR/D-2015/001 INFOTAINMENT-SYSTEM
1.3 Forutsetninger og begrensninger
1.3.1 Avgrensninger
- Større modifisering i eksterne biblioteker for å optimalisere visuell design er ikke noe
deltagerne ønsker å fokusere på. Målet med prosjektet er å produsere er produkt som
beviser at den tiltenkte løsningen er mulig å realisere. Et brukergrensesnitt som er hundre
prosent feilfritt er ikke ett av målene, selv om det er ønskelig. Denne avgrensningen er lagt
til i etterkant av forstudierapporten.
1.3.2 Forutsetninger
-
-
Et fullført prosjekt på nevnt enhet krever at en slik enhet kan oppdrives. Det krever også at
RedRock har mulighet til å bestille en slik enhet, samtidig som den må kunne oppdrives i
god tid før presentasjon av det endelige produktet. Det kan også ende med at enheten som
velges er noe dyrere enn det som var utgangspunktet.
En live visning av produktet krever tilgang på live data, det er ikke sikkert dette er mulig å
skaffe i løpet av prosjektperioden.
Montasje i kjøretøy krever tilgang på strøm, dette må være tilgjengelig ved eventuell
installasjon av produkt.
1.4 Problemløsning
Prosjektet tar sikte på å utvikle en komplett prototype, målene kan oppsummeres i
problemstillingen: Kan et komplett Infotainment-system utvikles på lavkostnads fastvare?
Spørsmålet skal besvares ved å utvikle en prototype som skal kjøres på en slik enhet ved hjelp av
Android som operativsystem. Selve oppgaven løses stegvis, i starten ligger mye av fokus i
planlegging. En egen forstudierapport ligger vedlagt, denne tar sikte på å planlegge oppgaven løst,
velge verktøy og diskutere ulike løsningsmetoder. Det er satt en liste med oppsatte løsningsmål,
målene er fordelt i ulike kategorier basert på prioritet, og vil utføres utfra hvor mye tid gruppen har
tilgjengelig.
1.4.1 Prioritet A (Høy)
-
IFS-1 : Skallet rundt selve systemet, et ferdig basissystem klart for ulike moduler.
IFS-2 : Kartmodul, skal vise kjøretøyet på et kart, slik at brukeren kan se hvor en befinner seg.
IFS-3 : Rutemodul, skal vise neste holdeplass, tidsestimat basert på GPS-koordinater.
IFS-4 : Nyhetsmodul, vise meldinger til brukeren. Ligger over alle andre moduler.
IFS-5 : Innebygget funksjoner for å håndtere tap av internett / GPS.
IFS-6 : Integrasjon med back-end som kan sende og holde orden på klienten
1.4.2 Prioritet B (Middels)
-
IFS-9 : Integrasjon av SIM (datanett til enhetene).
IFS-10 : Integrasjon av GPS i selve enheten, og bruk av denne kontra data fra eksisterende system.
IFS-11 : Nyhets modul, viser nyheter fra eksempelvis RSS.
IFS-12 : Reklame modul, viser video, reklame eller andre typer media.
1.4.2 Prioritet C (Lav)
-
IFS-14 : Endre start-up logoen i Android til RedRock.
IFS-15 : Implementere støtte for personteller.
IFS-16 : Animasjon ved bytte av moduler.
Side 9
HPR/D-2015/001 INFOTAINMENT-SYSTEM
1.4.3 Verktøy
Under utviklingen er det benyttet ulike verktøy. Nedenfor følger en oversikt over hvilke programmer,
verktøy og ressurser som er brukt under prosjektperioden.
Navn
Bruksområde
Microsoft Office Word
Rapportskriving
Microsoft Office Visio
Figurer og diagrammer
Microsoft Office Excel
Grafer
Android Studio (IntelliJ)
Utvikling IDE for Java og Android
Git
Versjonskontroll
IRC
Samhandling og koordinering
Skype
Samhandling og koordinering
Brackets
Tekstbehandling / utvikling av HTML, CSS, JS.
Sublime Text
Tekstbehandling / utvikling av HTML, CSS, JS.
KiTTY
SSH tilgang til webserver.
WinSCP
SSH overføring av filer via SCP.
VmWare ESXi
Virtualisering av webserver
VmWare vSphere Client
Håndtering av virtuelle servere
Atlassian Jira
Planlegging, Scrum og feilhåndtering
Asus Nexus 7
Nettbrett, til utvikling og testing
Atlassian Stash
Lagring av kildekode
StackOverflow
Nettsted for tekniske spørsmål
Photoshop CS6
Editering av bilder og grafikk
ClickCharts NHC
Flytskjema
1.5 Løsningsstrategi
I dette prosjektet er det bestemt at en skal kjøre Sprinter som går over èn uke. Startdagen for hver
Sprint er Søndag.
Under prosjektet brytes delmålene ned i mindre kategoriserte mål, og legges til på den fortløpende
JIRA Sprinten. På denne måten utvikles produktet gradvis etter målene over hele perioden.
Diskusjon vedrørende valg av teknologi og hjelpemidler tas på søndagsmøtene når ukens Sprint
planlegges. Oppgavene internt er fordelt slik at Christian K Haraldseid er «Scrum Master», dette
betyr i hovedsak at han skal holde kontroll på at utviklingen går etter planen, som «Scrum Master»
har han også et overstående ansvar for å løse problemer som blokkerer videre utvikling. Mikal
Svendsen er tildelt GIT ansvaret, og skal sørge for at det er orden i versjonskontroll systemet.
Prosjektet skal utvikles i samråd med oppdragsgiver, det er også satt opp periodiske
veiledningsmøter en gang i uken sammen med Christian Auby eller Halvard Øysæd.
Side 10
HPR/D-2015/001 INFOTAINMENT-SYSTEM
1.6 Rapportstrukturen
Rapporten er strukturert etter malen som er gjort tilgjengelig for faget DAT304, denne er modifisert
for å passe bedre til oppgaven den er brukt til. Kapittel en og to er en mer teoretisk bakgrunn for
prosjektet. Kapittel tre presenterer planlegging og løsningsforslag som ble utviklet før selve
utviklingen startet. Kapitlene prøver også å gi leseren en innføring i teknologien som skal brukes
videre i prosjektet, samt nødvendig bakgrunnsinformasjon om gruppens kvalifikasjoner og
erfaringer.
Rapporten prøver å oversette engelskspråklige ord som «Activity» og «Fragments» til fungerende
norske ord. Slike ord er markert med kursiv skrift for å illustrere at det har en spesiell mening.
Leseren skal først presenteres for den engelskspråklige varianten før denne oversettes til norsk. I
rapporten finnes også navn på teknologier som ikke er beskrevet i samme avsnitt. Slike ord er
markert med et opphøyd navn. Alle ord som har en slik opphøying er nærmere beskrevet i
terminologilisten som finnes under referanselisten.
Hoveddelen av rapporten er kapittel tre som tar for seg løsningen, og utførelsen av denne.
Produktet er strukturert opp i flere deler, noe som gjør at rapporten tar for seg de ulike delene i
detalj separat, helheten presenteres løsere uten de store tekniske forklaringene. Om leseren
ønsker detaljert oversikt over løsningen skal svarene finnes i underkapitlene som forklarer hver
enkelt komponent.
Kapittelet er fordelt inn i seks underoverskrifter. Hver enkelt underoverskrift har et fast antall
punkter som blir gjennomgått, punktene er som følger:
-
-
-
Teknologi
Beskriver den viktigste teknologien som er brukt i utviklingen av modulen / prosjektdelen.
Krav
Beskrive spesifikke krav satt på grunnlag av valgt teknologi.
Komponenter
Beskriver alle komponenter som blir brukt i modulen / prosjektdelen. (Klasser, funksjoner,
objekter)
Virkemåte
Forklarer virkemåten til løsningen med alle komponentene, altså funksjonene til modulen i
sin helhet.
Forbedringer
Forbedringer som prosjektgruppen ønsker å utføre, men som ikke er gjort.
Drøfting og testing
Drøfting av funksjon sett opp mot valgt teknologi og krav. Testing som er gjort for å
validere funksjon og ytelse.
Ikke alle moduler har alle underkategorier da det ikke er alle moduler som er hensiktsmessig å
vurdere ved hjelp av alle punkter.
Det siste kapittelet «Konklusjon» tar for seg resultatet som en helhet, i kombinasjon med kapittelet
«Diskusjon» som reflekterer over resultat og valg som ble tatt under prosjektet.
Side 11
HPR/D-2015/001 INFOTAINMENT-SYSTEM
2
Teknisk bakgrunn
2.1 Android
Kapittelet tar sikte på å innføre leseren i en forenklet forklaring av Android som utviklingsplattform.
Kapittelet forklarer også noen av hovedprinsippene / teknologiene som er brukt under utviklingen.
Utviklingen av prosjektet skal skje med Java / Android som plattform. Android er et operativsystem
utviklet av Google og er den største mobile plattformen på markedet. Operativsystemet er bygget
på toppen av Linux, det har derfor en Linux-kjerne. På toppen av dette kommer Androidrammeverket som gir utviklere tilgang til et omfattende sett av verktøy og funksjoner til utvikling.
Fordelen med systemet er at det er godt dokumentert, er optimalisert og åpent samtidig som det
er gratis i bruk.
2.2 Grunnprinsipper
En applikasjon utviklet for Android består i sin minste form av en layout og en «Activity». Videre i
rapporten oversetter en engelske betegnelser til en tilsvarende norske ord. «Activity» blir derfor
aktivitet videre i rapporten. Aktivitet-klasser interagerer med brukeren, derfor tar denne klassen
seg av å lage vinduer og andre visuelle ting som trengs for å vise brukeren layouten som er den
andre separate tingen som trengs for en enkel applikasjon. Layouten definerer den visuelle
strukturen til et brukergrensesnitt. Android har mange innebygde UI-komponenter som fritt kan
benyttes.
Figur 2 En samling av kompontenter fritt tilgjengelig i Android. [9]
Bildet over illustrerer noen av komponentene som er tilgjengelig for utvikleren. I tillegg til
komponentene vist på bildet over finnes det mange andre komponenter, som for eksempel
bildefremvisning, ulike typer layout-holdere for vertikal / horisontalt design, kalender, klokke med
mer. Det er også mulig å lage egne komponenter om det skulle være behov for dette. Når en
komponent plasseres på layouten får denne en unik ID, som refereres med et navn satt av utvikler.
Når dette er gjort refereres layouten fra aktiviteten, utvikleren kan da fritt manipulere
komponentene gjennom kode. Dette innebærer muligheten til å endre tekst, lese input med mer.
I dette prosjektet planlegges det å utvide den simple layout  aktivitet strategien med Fragments.
Et fragment kan sees som en porsjon av brukergrensesnittet, altså en oppstykket del. Fordelen
ved å bruke fragments er at en kan inneha en aktivitet som holder kontroll på flere fragments, disse
kan benyttes fritt innenfor gitt aktivitet. På denne måten kan en kjøre en helhetlig løsning selv om
porsjoner av programmet, (i vårt prosjekt definert som moduler), skal byttes ut / endres. [10]
Side 12
HPR/D-2015/001 INFOTAINMENT-SYSTEM
2.3 Rammeverk og innebygde funksjoner
Som nevnt tidligere har Android mange tilgjengelige løsninger ut av esken, dette betyr i praksis at
en slipper å skrive egen kode for mange av de underliggende operasjonene, da funksjoner som
ofte benyttes gjerne finnes innebygd i systemet. Eksempler på slike funksjoner som er brukt i
løsningen er beskrevet i dette kapittelet. I tillegg til en lett innføring i dette kapittelet er noen av
ressursene som er brukt beskrevet i detalj under delen hvor komponenten benyttes.
Event / Callback
Events blir mye brukt i Android, dette er en lytter i en klasse som har som oppgave å respondere
på en handling gjort av bruker, systemet eller koden. Et eksempel på et «callback» er når brukeren
trykker på en knapp. Det går da et «callback» via Android-rammeverket til funksjonen som lytter til
Konteksten til aktiviteten som kjører applikasjonen har lagt seg selv til som en lytter på knappen.
@Override
public void onClick(View view) {
Toast.makeText(MainActivity.this, "Button Clicked",
Toast.LENGTH_SHORT).show();
}
});
Når knappen da blir trykket på, vil funksjonen som er definert over bli kalt. Dette gjør at
applikasjonen kan respondere på for eksempel brukerinput. I løsningen er «callbacks» og
«interfaces» brukt mye for å gi applikasjonen oversikt over hva som skjer internt.
«Interfaces» er i denne konteksten ment som en datamodell for hva som skal sendes med
«callbacket» tilbake til funksjonen som implementerer det. Se for deg en applikasjon som
presenterer pristilbud til brukene. Denne applikasjonen består av en aktivitet som presenterer
tilbudene i samråd med en layout og en bakomliggende klasse som sjekker for nye tilbud. Det er
da naturlig å implementere en handling for nye tilbud. Dette kan implementeres på følgende måte
ved bruk av «callbacks» og «interfaces»:
Figur 3 Illustrasjon av "callbacks" / "interfaces" sin virkemåte.
Klassen som tar seg av sjekken for nye tilbud kan da lage en ny instans av DiscountListener, og
gi denne konteksten til applikasjonen. Når nye data er klar kan den enkelte gi beskjed til
hovedklassen gjennom «interfacet».
Side 13
HPR/D-2015/001 INFOTAINMENT-SYSTEM
Google Maps
Google Maps er et separat API tilgjengelig på Android levert av Google. Denne API-løsningen er
en implementasjon av Google sin kartløsning tilgjengeliggjort for utvikling på Android. En får her
tilgang til en komplett kartløsning, med tilhørende funksjoner som markører, bevegelse og
oppdatering. [11]
Google Location Manager
Innebygget mulighet for å få tak i enhetens posisjon, via denne klassen kan en også få tak på
periodiske oppdateringer, eller få varsler om enheten beveger seg innenfor en gitt posisjon.
Klassen bruker ulike måter for å håndtere posisjonsvarsler, dette inkluderer GPS, WiFi eller en
egen variant. [12]
Side 14
HPR/D-2015/001 INFOTAINMENT-SYSTEM
3 Løsningsforslag
Nedenfor følger en oversikt over den tiltenkte løsningen i et høyere perspektiv. Under denne fasen
av planleggingen er ingen viktige tekniske valgt tatt, og oversikten er mer ment som et
utgangspunkt som ble tatt med videre inn i løsningen. Mye av informasjonen som finnes i dette
kapittelet kommer fra forstudierapporten som finnes i vedleggene. Delkapittelet fungerer som en
innledning i kravspesifikasjonene og som en forklaring på hvordan løsningen skal fungere når den
er ferdig.
3.1 Hardware
Et viktig aspekt med prosjektet er å finne en enhet som er innenfor kriteriene prosjektet stiller. Den
riktige enheten må være kraftig nok til å kunne gi brukerne en sømløs opplevelse uten «hakking».
Den optimale enhet bør kunne tilfredsstille følgende krav:
- Bør være av tilstrekkelig kvalitet, den må være robust da bytte av klienter etter montering
fort blir forbundet med store kostnader.
- Må ha innebygget støtte for trådløst nettverk, da en ikke ønsker å ha for mange «ekstraenheter» koblet til via USB-grensesnittet.
- Bør ha valgfri mulighet for integrasjon med en SIM-leser. På denne måten kan en enhet i
kjøretøyet oppføre seg som en «moder-klient» som deler mobilt internett med resten av
enhetene.
- Bør ha innebygget GPS, til bruk ved kart og holdeplassinformasjon. Det er også en mulighet
å lese dette fra busser som allerede har Togital billettsystemet integrert. Det kan også være
en mulighet at bare en av klientene har GPS muligheter, og deretter deler sine koordinater
til alle klientene i samme sone.
- Må ha en sterk nok CPU, kombinert med riktig mengde minne, lagringsplass og
tilkoblingsmuligheter (USB-otg3, USB, HDMI)
Side 15
HPR/D-2015/001 INFOTAINMENT-SYSTEM
3.2 Produktdesign
Kort oppsummert ser gruppen for seg følgende løsninger. Et selskap bestiller løsningen og
oppgir hvor mange noder som trengs, altså hvor mange skjermer som skal settes opp i
kjøretøyet. Hver skjerm må ha sin egen node som viser informasjon definert fra serveren, dette
kan være nyheter, ruteinformasjon, vær, holdeplasser med mer. Basissystemet skal være
modulbasert, slik at nye moduler kan legges til ved behov.
Figur 4: Illustrasjon av tiltenkt løsning montert i en buss. [13]
Figur 5: Montering av enhet på baksiden av monitor.
Side 16
HPR/D-2015/001 INFOTAINMENT-SYSTEM
Løsningsforslag 1 – Innebygget modul for mobilkommunikasjon.
Et kjøretøy har en moder-klient som har innebygget støtte for mobilkommunikasjon. Løsningen
kjører med Android som grunnsystem og kan derfor ta nytte av den innbygde støtten for deling av
data-tilkobling. Ved bruk av dette forslaget kan en node da stå for all kommunikasjon med
omverden, og dele dette til andre noder i samme installasjon. På denne måten slipper man ekstra
utstyr, og ekstra kostnader ved å ha en separat ferdigløsning som «Huawei 4G modem» eller
lignende. Kostnadsmessig vil dette utgjøre at hovednoden vil bli litt dyrere, men den totale
kostnaden vil bli mindre, samtidig som installasjon forenkles.
Figur 6 Hoved-node med integrert mobildata.
Løsningsforslag 2 – Ekstern enhet for mobil-kommunikasjon
I denne varianten har vi en ekstern enhet for kommunikasjon som nodene kobler seg opp mot.
Denne enheten står da for nettverkskommunikasjon mellom alle nodene. En kan da bruke billigere
noder på hver skjem, men er avhengig av utstyr levert av en tredjepart, som igjen må integreres
inn i løsningen.
Figur 7: Ekstern WiFi-enhet med moduler over WiFi.
Moduler
Systemet skal som nevnt tidligere støtte ulike moduler. En modul skal kunne kjøres uavhengig av
andre moduler, og målet er at disse også skal kunne skaleres etter hvor stor skjermflate som er
tilgjengelig. En blanding av moduler skal kunne vises samtidig. (Se bildet under for en illustrasjon
på dette.) Modulene skal være bygget som et fragment, som tidligere nevnt er fragment en
modulær del av en aktivitet som kan byttes ut mens selve applikasjonen kjører. På denne måten
får en muligheten til å bytte mellom moduler mens programmet kjører.
Figur 8: Flere moduler på samme skjermflate.
Side 17
HPR/D-2015/001 INFOTAINMENT-SYSTEM
Rutemodul
En av hovedmodulene er rutemodulen. Denne har som oppgave å vise informasjon om
holdeplasser langs ruten. Denne modulen skal benytte GPS-koordinater for å lokalisere seg langs
ruten. Alle koordinater for rutestopp finnes allerede i Red Rock sine systemer, og disse skal
integreres i løsningen. Eksisterende koordinater brukes så i modulen for å regne ut estimerte
tidspunkt for ankomst til neste holdeplass. Modulen skal også vise estimerte tider fremover langs
ruten og oppdatere seg når kjøretøyet har kjørt forbi en holdeplass.
Figur 9: Rutemodul (venstre) kombinert med kartmodul.
Kartmodul
Kart-modulen har som oppgave å vise brukeren hvor kjøretøyet befinner seg. For å lage modulen
benyttes Android sin integrasjon mot Google Maps. Dette verktøyet har alle muligheter en trenger
for å lage en «live sproingsløsning». Ved å vise kjøretøyets nøyaktige posisjon på kartet har
brukeren hele tiden oversikt over hvor kjøretøyet befinner seg i forhold til destinasjon. Kombinert
med «rutemodulen» (se figur over) er dette en veldig enkel oversikt over kjøretøyets fremgang.
Reklamemodul
Modulen skal kunne vise reklame / media på skjermene. Det skal være støtte for både bilde og
video. Modulen skal selv stå ansvarlig for å hente / slette filer lokalt. For å unngå problemer med
tap av internett skal alle filer hentes fra den sentrale serveren og lagres lokalt på enheten. Ved
oppdatering skal gamle filer slettes og nye lastes ned.
Nyhetsmodul
Android har en native «toast» mulighet, og det er denne en ønsker å etterligne med denne
modulen. En toast er egentlig bare en tekstlinje som legger seg over skjermen for å vise
brukeren informasjon. En modul av samme type ønskes integrert i prosjektet. Denne kan nyttes
til å vise viktig informasjon til brukerne, samtidig som den kan brukes som en «rullende
nyhetsløsning» i kombinasjon med nyhetsmodulen.
Figur 10: Eksempel på en toast.
Side 18
HPR/D-2015/001 INFOTAINMENT-SYSTEM
4 Løsning
4.1 Enhet / Hardware
Ut fra kravene som ble definert tidligere i rapporten kom gruppen frem til to ulike kandidater. Begge
er gode muligheter, men den dyreste er vurdert best egnet for oppgaven. Kandidat nummer to er
rimeligere, og derav også nærmere det oppdragsgiver ønsker. Dog er et viktig aspekt pris / kvalitet
/ brukeropplevelse, og dette er viktig å ta med i betraktningen av det endelige valget.
Ourspop MK808B
HummingBoard i2 - SolidRun
CPU
RAM
Ũ¨STORAGE
GPU
‘ Wifi
BT
4G
MemoryConfig
Android
Pris ca (NOK)
Cortex A9
1 GB
MicroSD
GC880
Ja
Ja
Ja
64-bit
4.4.4
650
CPU
RAM
STORAGE
GPU
Wifi
BT
4G
Memory config
Android
Pris ca (NOK)
Cortex A5
1GB
8 GB
Mali 450
Ja
Ja
Nei
32 – bit
4.4.2
350
Figur 12 MK808B – Ourspop [17]
Figur 11 i2 Solidrun [16]
Enhetene som er valgt har litt fundamentale forskjeller, det dyreste alternativet i2 er vurdert som
den beste kandidaten. Denne maskinvaren koster en del mer enn det billigste alternativet men
veier opp for dette i en kraftigere prosessor, bedre GPU4 og flere funksjoner. Blant annet støtter i2
integrert SIM kort og har også støtte for en separat GPS-modul. Dette er egenskaper MK808B ikke
innehar, noe som gjør den mindre aktuell da løsningen ikke kan benyttes i busser som ikke har en
eksisterende GPS modul.
Forskjellen i ytelse er også ganske markant, samt at kvalitetsforskjellene er store. En mulig løsning
er å bruke i2 som en hoved-node og om kunde ønsker flere skjermer kan MK808B blir brukt som
barne-noder av i2. På denne måten kan en ha en dyrere hoved-node med flere billige barne-noder.
Dette innebærer dog at det utvikles en måte der hoved-noder kan utveksle GPS-data med barnenoder.
Dessverre var det ikke mulig for RedRock å skaffe enhetene for testing innen fristene som var
definert i Gannt diagrammet (tilgjengelig som vedlegg), det ble derfor besluttet å fortsette testing
og utvikling på Nexus 7 nettbrett som prosjektgruppen fikk disponere av RedRock. Dette ble ansett
som en grei løsning da ytelsen på nevnte nettbrett er tilsvarende lik ytelsen på «HummingBoard
I2». Testing og fremvisning er også enklere ved bruk av nettbrett da skjerm og WIFI er innebygget
i enheten, kombinert med et eget batteri. Selv om løsningen ikke er testet på aktuelle enheter er
fremdeles nettbrett en høyst aktuelt og realistisk kandidat, da spesifikasjoner og operativsystem er
identisk til enhetene systemet skulle ha kjørt på.
Side 19
HPR/D-2015/001 INFOTAINMENT-SYSTEM
4.2
Applikasjon
Applikasjonen i seg selv har noen overordnede funksjoner. Blant annet er det applikasjon, eller
hovedaktiviteten som har ansvaret for å koordinere samkjøringen av ulike moduler. Applikasjonen
kommuniserer med serveren via Google GCM (videre forklaring i kap 4.7), alle meldinger som blir
mottatt fra serveren kommer via applikasjonens «GcmIntentService» og blir delt ut til alle moduler
som trenger informasjon om ny data. Tap av internett er også noe hoved aktiviteten holder styr på.
Denne har implementert en funksjon som gir beskjed til alle moduler om internett går tapt, det er
så hver enkelt modul sitt ansvar å holde applikasjonen kjørende i perioden tilkobling er
utilgjengelig.
I tillegg til dette er applikasjonen bygget ut med funksjoner for falsk posisjonering. Komponentene
som håndterer dette er beskrevet under.
LocationService
Kort oppsummert er LocationService en tjeneste som distribuerer lokasjonsdata til resten av
applikasjonen. Tjenesten er en Android Service som kjører så lenge applikasjonen kjører.
Tjenesten fungerer på en slik måte at andre komponenter i applikasjonen kan binde seg opp mot
tjenesten, når en komponent binder seg opp vil den motta all data som sendes fra komponenten.
Det første tjenesten gjør når den starter er å sjekke at den er koblet til internett. Om internett er
tilgjengelig laster den ned riktig rute, basert på innstillingene satt i applikasjonen.
Når ruten er lastet ned gir den beskjed til alle komponenter som er bundet opp til applikasjonen.
Den behandler så ruten og laster inn alle holdeplasser til systemet. Holdeplassene blir så lagt i
Android sitt «Proximity Alert» rammeverk. Dette er en innebygget funksjon som tar inn en posisjon.
Posisjoner som er lagt inn overvåkes av systemet slik at tjenesten får beskjed når enheten befinner
seg innenfor posisjonen definert i hver enkelt holdeplass. Når enheten når en holdeplass gir
tjenesten beskjed til alle abonnenter.
Tjenesten har også ansvar for å supplere applikasjonens komponenter med posisjonsdata, dette
kan være fra enhetens GPS eller en ekstern kilde. Et eksempel på en slik kilde er test-klassen
«MockProvider».
Figur 13: Figuren simulerer virkemåten til "LocationService"
Side 20
HPR/D-2015/001 INFOTAINMENT-SYSTEM
MockProvider
MockProvider er en klasse utviklet for testing. Den henter posisjonsdata i XML-format. Et
posisjonsdokument i XML inneholder posisjoner for en rute med et tidspunkt for hver enkel
posisjon. Klassen tar da et gitt XML-dokument og bruker dette som en posisjonskilde til
LocationService. På denne måten kan vi teste applikasjonen uten å kjøre ruten som skal testes. I
Android leveres posisjonsdata av en «Location Provider». Denne leverandøren gir systemet
oppdaterte koordinater med et gitt intervall, i MockProvider leveres dataen i hastigheten som er
definert i XML-filen ved hjelp av tidspunkt. Det er også bygget inn en funksjon for å øke hastigheten,
på denne måten kan en kjøre gjennom en rute i høyere hastighet.
Side 21
HPR/D-2015/001 INFOTAINMENT-SYSTEM
4.3 Kartmodul
MapModule er en modul som forsøker å kontinuerlig vise en oppdatert posisjon av bussen på et
kart, og jevne ut bevegelsen mellom posisjonsoppdateringene fra Androidenhetens GPS. For at
modulen skal kunne tilby en jevn flyt i bevegelse må den enten ofre tid ved å kjøre på en liten
forsinkelse, eller presisjon ved å gjette neste steg.
Figur 14: MapModule vist til høyre
4.3.1 Teknologi
Den viktigste teknologien i MapModule er Google Maps. MapModule er bygget rundt Google Maps
og dens funksjonalitet. I tillegg brukes Android LocationManager, og enhetens innebygde GPSmaskinvare for oppdatering av GPS-posisjon. Det ble valgt å bruke Google Maps; dette fordi det
er innebygget i Android, og dokumentasjonen er god.
4.3.2 Krav
Med Google Maps for Android får en benyttet seg av mye ferdig funksjonalitet, det finnes også
dessverre en del begrensninger både teknisk og i henhold til Google sin «Terms of Service». Det
er for eksempel ikke lov å mellomlagre kartet lokalt på enheten, noe som gjør at kartet krever
internett tilgang for å fungere. Google tillater heller ikke bruk av Google Maps til navigasjon, heller
ikke kommersiell bruk, men spesifisert i brukeravtalen står det at det er greit å bruke kartet til
visning av informasjon for kollektiv transport. Det er uansett et krav at vår applikasjon holder seg
til Google sin avtale.
Side 22
HPR/D-2015/001 INFOTAINMENT-SYSTEM
4.3.3 Komponenter
MapManager
MapManager inneholder all logikken som brukes til oppdatering av kartposisjon og interpolering
av bevegelse. Den har ingen UI komponenter internt, men krever at en kallende komponent
supplerer et Google Map. MapManager er ikke en service, men dens livstid i applikasjonen er som
regel fra applikasjonsstart til slutt. Det er ikke kritisk at den holder sin tilstand fra start til slutt, derfor
er den kun opprettet som et vanlig objekt Android kan midlertidig slette den om den trenger å
frigjøre ressurser.
MapManager abonnerer alltid på posisjonsoppdateringer fra Android, om den ikke har et aktivt
Google Map ignorerer den oppdateringene. Så fort en komponent sender et kart til MapManager,
opprettes det en Map Marker på kartet som representerer kjøretøyet. Deretter begynner
applikasjonen å lagre posisjonsoppdateringene i et mellomlager. MapManager prøver hele tiden å
være én oppdatering på etterskudd, slik at når mellomlageret bare er av størrelse en, flyttes ikke
kjøretøyet. Så fort den er av størrelse to eller mer, tar den de to eldste oppdateringene i
mellomlageret og interpolerer bevegelsene mellom de.
Frekvensen på ekte oppdateringer fra Android-enheten er nesten alltid på et sekund eller mer, som
oftest opp imot eller over to sekunder. Dette gir en veldig hakkete opplevelse, så for å få flyt i dette
må klassen interpolere mellom punktene. Så fort MapManager har to ekte punkter, sjekker den
tiden det tok mellom punkt A og punkt B, den forfalsker så et antall punkter mellom hovedpunktene
basert på hvilken oppdateringsfrekvens som kjører. Siden det alltid er snakk om relativt korte
avstander brukes det lineær interpolasjon. For hvert punkt som lages flyttes Map Marker og kamera
samtidig, Google Maps tilbyr allerede glatte animasjonsfunksjoner for å flytte kameraet, men det
var vanskelig å synkronisere dette med bevegelsen til Map Marker. Derfor flyttes begge deler steg
for steg.
MapManager sjekker også konstant hvor langt den ligger på etterskudd, og spoler fremover om
den ligger lenger bak enn planlagt.
Side 23
HPR/D-2015/001 INFOTAINMENT-SYSTEM
4.3.4 Virkemåte
Diagrammet under viser flyten mellom de forskjellige komponentene i MapModule.
Figur 15 Oversikt over virkemåten til kartmodulen.
ModuleHandler, som representerer en komponent med kontroll over UI oppsettet, oppretter en
instans av MapManager ved oppstart. Når ModuleHandler vil vise kart, oppretter den også et
GoogleMap, og sender en referanse av denne til MapManager. MapManager abonnerer på
posisjonsoppdateringer med en gang den blir opprettet, når den så får et GoogleMap begynner
den å oppdatere dette.
Side 24
HPR/D-2015/001 INFOTAINMENT-SYSTEM
4.3.5 Forbedringer
Kartmodulen er kanskje den mest visuelle og synlige modulen i applikasjonen, og står derfor for
mye av helhetsinntrykket. Siden den bygger på en tilnærming av virkeligheten ved interpolering og
relativt grove posisjonsestimater, er det mye rom for forbedring. For eksempel om en oppdatering
i posisjon er litt sent ute og ikke er ankommet før interpolasjon mellom de to siste punktene er
ferdig, vil markøren stoppe helt opp. Dette fordi den ikke har noe mer data å gå på. En ting som
kunne utbedret dette er å gjette hva som vil skje, slik som for eksempel online spill gjør, ved å se
hvor bussen var på vei ved siste oppdatering, fart, og posisjon. Om bussen er på en holdeplass
kan en anta at bussen stopper, om bussen var på vei en retning i 80km /t er det naturlig å anta at
den fremdeles er i bevegelse.
Videre er det også mulig å kunne få til en finere kartmodul ved å bruke et annet API enn Google
Maps. Det ble dessverre gjort lite mangelfulle undersøkelser på alternativene til Google Maps før
utviklingen startet. Google Maps var det mest tilgjengelige og velkjente API-et og det ble derfor
også valgt. Det er et par problemer med Google Maps som gjør at kanskje andre alternativ hadde
vært mer passende. For det første får en ikke lov å mellomlagre kartdata, for det andre har en ikke
tilgang til informasjon om hvor veiene ligger, det vil si «snap to road-funksjonalitet» uten å gå
gjennom Google sitt online API. Sistnevnte tjeneste koster penger, og krever kontinuerlig internett
tilgang. Dette synes gruppen er en dårlig løsning for et system som krever redundans med tanke
på tilgang til internett.
4.3.6 Drøfting
Om en hadde mer tid er nok MapModule den modulen som hadde sett mest forbedringer. En innså
tidlig i prosjektperioden at det kunne bli en stor jobb å gjøre den skikkelig, derfor var MapModule
også en av de siste modulene som ble utviklet. Alt i alt er gruppens deltagere fornøyd med
modulen, men det skulle spesielt her vært gjort et mer grundig forarbeid med tanke på valg av
teknologi. Mangel på «snap to road-funksjonalitet» kan se litt rart ut, men det ble valgt å ikke
inkludere dette fordi det vil kreve veldig mange API-kall til Google, noe som koster penger. I tillegg
har modulen synlige «artifacts» i form av hvite striper under tegning og animering av kartet, dette
er noe som ikke er sett nærmere på fordi rendering-funksjonalitet er ute av vår kontroll. Et mulig
svar på dette kan være at en oppdaterer kameravisningen på en høyere frekvens enn tiltenkt av
Google.
Modulen fungerer dog fint, og som en informasjonskilde for passasjerer gjør den jobben sin, det er
endringer av kosmetisk art som eventuelt drar ned helhetsinntrykket.
Side 25
HPR/D-2015/001 INFOTAINMENT-SYSTEM
4.4 Rutemodul
Rutemodulen er en av hovedmodulene i applikasjonen. Denne knytter sammen GPS /
Lokasjonsdata med rutedata. Poenget med modulen er å gi brukeren en visuell visning på hvilken
holdeplass / målplass som kommer, samtidig som den gir informasjon om estimert tidspunkt for
ankomst. En visuell fremstilling av endelig design følger:
Figur 16: Illustrasjon av rutemodulen. Nummerert for henvisninger i teksten.
1
2
3
4
Holdeplassnavn: Feltet viser navnet på en holdeplass. Navnet hentes fra rutelisten som er
definert for enheten.
Estimert tid: Feltet viser estimert tid til ankomst for markert holdeplass.
Neste holdeplass: Det midterste feltet viser alltid nestkommende holdeplass, dette gir en
enkel oversikt over hvilke som er neste i rekken.
Lukket liste: Listen inneholder alle holdeplasser som er passert. Alle passerte holdeplasser
innehar tidspunkt for passering.
Side 26
HPR/D-2015/001 INFOTAINMENT-SYSTEM
4.4.1 Teknologi
Rutemodulen er bygget opp ved hjelp av flere ulike hjelpemidler. Sentralt i utviklingen står bruken
av Google Directions API som er ryggmargen i modulen. Dette API-et fra Google regner ut tidsbruk
mellom to punkter ved hjelp av parameter satt av utvikler. I vårt eksempel sendes et ruteobjekt
gjennom en parser, som deretter lager en forespørsel mot Google Directions API. I denne
forespørselen sender en enhetens posisjon, samt posisjon for målet. Forespørselen inneholder
også type transportmiddel. I vår løsning er dette transportmiddelet satt til buss, men dette kan
enkelt endres i konfigurasjonsfilene.
Beslutningen om å benytte Google Directions API var relativt enkelt, Google er en stor aktør med
et godt datagrunnlag for beregning. Dette kombinert med bruken av Google Maps gjør Directions
API til et naturlig valg i løsningen. Et problem med dette API-et er restriksjonene på bruk. Uten å
betale for en lisens kan en gratis konto kun utføre 2,500 spørringer over en 24 timers periode. [14]
Under utviklingsperioden er dette en helt OK grense, problemene oppstår først når flere enheter
på samme konto skal kjøre døgnet rundt langs landets mange veier. Det neste alternativet er
Google Maps API for Work. Ved bruk av denne lisensen øker antall spørringer fra 2,500 til 100,000.
Applikasjonen vår er derfor designet for å bruke en utvidet lisens. Ved å øke antall spørringer kan
en effektivt minke feilmarginen så mye som mulig, uten å overdrive antallet. En annen teknologi
som blir brukt mye i modulen er GPS, denne teknologien er essensiell da nåværende posisjon hele
tiden er utgangspunktet for de estimerte tidene til ankomst. Heldigvis er denne godt implementert
i Android-økosystemet, og gir oss grei tilgang til nøyaktige posisjoner selv i høy fart.
4.4.2 Krav
De viktigste kravene til modulen er satt med hensyn på den valgte teknologien, samtidig er noen
krav satt med hensyn på det interne økosystemet i applikasjonen.
Det viktigste kravet er å oppnå høy grad av presisjon i utregningen av tidsbruk til målet, dette må
også gjøres på en måte med minst mulig spørringer til Google Directions API.
Side 27
HPR/D-2015/001 INFOTAINMENT-SYSTEM
4.4.3 Komponenter
I komponentseksjonen av beskrivelsen blir hver enkelt komponent som sammen utgjør modulen
beskrevet. Etterfølgende kapittel tar for seg virkemåten sammen, slik at leseren kan få en
presentasjon av hele systemet.
Ruteobjekt
Ruteobjektet er et objekt som inneholder informasjon om ett enkelt punkt langs ruten. Listen en
ser i designet (fig.13) består av syv ulike ruteobjekter satt sammen i en liste. Ruteobjektene blir
sendt gjennom flere ulike moduler og brukes flere plasser i løsningen. Objektene oppstår først når
applikasjonen laster ned en rute fra serveren. Koden som så går igjennom alle de forskjellige
rutepunktene har som oppgave å opprette en liste ruteobjekter som så blir sendt videre inn i
løsningen. I løpet av livsløpet til et ruteobjekt mottar det flere viktige parametere. En liste over
tilgjengelige parametere følger.
Id
Name
Position
estTime
queryURL
waypoints
En unik ID for hvert stopp langs ruten.
Navn på holdeplass
Posisjon for holdeplass
Siste estimerte tid tilgjengelig
Spørre-URL som sendes til Google.
Andre holdeplasser før denne i den samlede
ruten.
Ruteobjekter er designet for å være frittstående, med mye informasjon. På denne måten kan
objektet benyttes flere plasser i løsningen, dette fordi objektet inneholder de fleste funksjoner som
trengs. Livsløpet til ruteobjektet er beskrevet videre i komponentene under.
Rutehåndtering
Det er også laget et interface for rutehåndtering. Dette er en hjelpeklasse som er laget som en
AsyncTask, dette står for «Asynchronous Task» eller en asynkron oppgave. Ved å kjøre denne i
bakgrunnen hindrer en at applikasjonens UI-thread fryser når en intensiv jobb utføres. UI-thread
er en samlebetegnelse for tråden bruker-interfacet kjører på, altså det brukeren ser. Hjelperen sin
oppgave er å hente riktig definert rute for enheten. Riktig rute er satt på server av operatør, og er
lastet inn i konfigurasjonen til enhet ved hjelp av instruksjoner fra serveren. Dette er beskrevet i
detalj i serverkapittelet. Oppgaven henter så ruten ved bruk at et http kall, ruten lastes ned i
JSON6 format og blir omgjort til RuteObjekter. Når denne prosessen er ferdig sendes en liste
med objekter via LocationManager til modulen for visning og videre prosessering. Prosessen er
beskrevet grafisk under.
Figur 17: Figur som forklarer virkemåten til klassen "GetRouteData"
Side 28
HPR/D-2015/001 INFOTAINMENT-SYSTEM
Estimering av rutetider
Hovedpoenget med modulen er estimering av tidsbruk mellom nåværende posisjon og neste mål
definert i ruten. For å utføre beregningene er det også laget en AsyncTask for dette formålet,
denne er navngitt «GeoDirection» og har som oppgave å estimere tid mellom nåværende
posisjon, og posisjonen som er angitt i ruteobjektet den håndterer. Som i alle andre hjelpeklasser
behandles ruteobjektene individuelt, dette betyr at modulen sender inn ett enkelt objekt,
«GeoDirection» utfører så utregningene og returnerer dette objektet til modulen.
Hjelpeklassen benytter seg som nevnt tidligere av Google Directions API, og har implementert et
interface. Dette interfacet tar seg av callback, og levering av resultater til klassen som abonnerer
på dette. I vårt tilfelle er dette selve rutemodulen. Selve spørringen mot Google utførers som et
ett http kall. Syntaksen på spørringen eksisterer allerede i objektet, så oppgaven til hjelperen er
relativt simpel. Send spørringen, motta svar, tolk svar, oppdater objekt og send tilbake. Diagramoversikten under illustrerer virkemåten.
Figur 18 Figur som forklarer virkemåten til "GeoDirection" klassen.
I diagrammet kan en også se GeoCoderException dette er en egen klasse designet spesifikt for
bruk med Google Direction API. Selve spørringen mot Google kan gi mange ulike resultater,
feilmeldinger er kamuflert med ulike statusmeldinger og kan være vanskelige å tyde. For å gjøre
testing lettere ble det laget en egen exception klasse, denne klassen gir god informasjon i loggen
om hva som gikk galt, på denne måten blir det lettere å fikse eventuelle feil.
Et eksempel kan være at en sender inn en spørring som har for mange veipunkter i
forespørselen, Google vil da svare : «MAX_WAYPOINTS_EXCEEDED». Dette er i og for seg en
grei melding, men for å gjøre det lettere er det i vår egen exception lagt til litt mer informasjon.
Tilsvarende eksempel med vår egen klasse gir følgende resultat.
Dette gjør det lett å få en oversikt over hvorfor en fikk feil, og hva som må gjøres for å utbedre
feilen.
Side 29
HPR/D-2015/001 INFOTAINMENT-SYSTEM
3.4.4 Virkemåte
En forenklet oversikt skal gi et inntrykk av hvordan de ulike komponentene jobber sammen for å
lage rutemodulen.
Figur 19: Figur som illustrerer sammenhengen mellom alle komponentene i modulen.
Selve modulen starter med å få en gyldig rute ved hjelp av rutehåndtereren. Modulen mottar som
nevnt tidligere en liste med ruteobjekter fra denne tjenesten. Det neste som gjøres internt i modulen
er å legge alle rutepunktene inn i en liste, eller ListView som er en visuell komponent som
presenterer listedata for brukeren. Rutemodulen består av to ulike lister (2) og (4) i
designpresentasjonen av modulen. Den åpne listen består av ruteobjekter vi enda ikke har nådd,
og den lukkede listen inneholder ruteobjekter som er passert. Naturligvis vil alle ruteobjekter ligge
i den åpne listen ved starten av en ny rute.
Når alle objektene er lastet inn i listen går en videre til estimering av tid. Før dette kan gjøres må
det bygges opp et knutepunktregister i hvert enkelt ruteobjekt. GeoDirection tjenesten returnerer
alltid raskeste vei fra A til B. Dette passer dårlig da bussen kan ta mange ulike veier mellom rutene,
derfor er det laget en funksjon som tar hensyn til ruten ved hjelp av knutepunkter. Funksjonen
legger til posisjonen til objektene foran den i listen, slik at rutepunkt nummer tre i listen går via to
og en. Dette sørger for at ruten som blir forespurt av Google, er den riktige ruten, og ikke raskeste
vei mellom nåværende posisjon og neste stopp.
Når knutepunkter er lagt til i ruteobjektene sendes de inn i GeoDirection-hjelperen. Det er en
referanse som sendes videre, slik at når objektene oppdateres asynkront i hjelperen vil de
automatisk oppdatere seg i listen. På denne måten slipper modulen å oppdatere / legge til
objektene i listen en gang til for hver gang de blir endret.
På dette tidspunktet er listen oppdatert med estimerte tidspunkter og ruten er klar til å brukes. Etter
hvert som bussen / kjøretøyet beveger seg langs ruten er det LocationManager sin oppgave å
holde styr på om bussen nærmer seg et punkt langs ruten som er av interesse, som for eksempel
en holdeplass. Når en når et nøkkelpunkt langs ruten får modulen beskjed om dette via et interface
som kaller «onEvent-funksjonen». Denne finner ut hvilken holdeplass handlingen gjelder, og
utfører riktig oppgave basert på dette. En av grunnene til at den sjekker holdeplass mot handling
er for å dobbeltsjekke at ruten holdes konsekvent riktig langs hele reisen. Når bussen når en
holdeplass flyttes nåværende holdeplass ned i den lukkede listen, neste kandidat blir hentet fra
den åpne listen og lagt i «neste holdeplass-kolonnen».
Side 30
HPR/D-2015/001 INFOTAINMENT-SYSTEM
Rutinen fortsetter slik langs hele ruten. Tiden oppdateres også konstant, og en intern klokke holder
kontrollen på å trekke fra minutter på alle rutepunktene. Det er også mulig å sette en
oppdateringsfrekvens, på denne måten kan modulen sjekke nåværende posisjon opp mot de
eksisterende rutepunktene via Google, dette for å justere for eventuelle feil langs ruten som har
oppstått mellom start og punktet en befinner seg nå. Om denne funksjonen aktiveres, resulterer
dette i en høyere nøyaktighet, samtidig som det øker antall spørringer mot Google.
4.4.5 Forbedringer
Modulen har flere områder der den kan forbedres. Dette er en modul som skal estimere tidsforbruk,
og det er derfor naturlig at dette som regel kan forbedres. Google Directions API er i
utgangspunktet en relativt god tjeneste til å estimere tid mellom to punkter, tester mot «1881.no»
og «Gulesider» viser tilsvarende resultater med Google Directions sine estimater. Dog er det ikke
alltid dette er helt korrekt, og for å forbedre modulen kan det være en mulighet å utvide den med
flere kilder for estimering, for eksempel kunne det bygges inn ordinære rutetider. Rutetidene kunne
brukes sammen med Google for å estimere tiden bedre, eventuelt som en feilsjekk og
justeringsløsning.
En annen forbedring som kunne utvikles er en mellomlagringsløsning for estimert tidsforbruk
tilknyttet aktiv rutedata. På denne måten kan antall API-spørringer mot Google reduseres da en
buss ofte kjører samme ruten over lengre tid. Ved færre spørringer kan nøyaktigheten i løsningen
økes, da flere spørringer på gunstige tidspunkt vil være mulig for å oppdatere listen over estimater.
4.4.6 Drøfting og testing
Rutemodulen er en litt vanskelig modul å teste da den er veldig avhengig av andre systemer i
løsningen. Dette kombinert med mangel på ekte test-scenarioer har laget noen problemer for
gruppen. Som nevnt tidligere ble det utviklet en falsk tilbyder av GPS koordinater. Dette ga oss
muligheten til å spille av en rute, eller lure enheten til å tro at den var i bevegelse. Dette fungerte
greit for grovtestingen, men for finjusteringer opplevdes oppdateringene som litt grove. Dette
medførte at for eksempel LocationManager sin onEvent ikke ble kalt opp med den nøyaktigheten
som var ønsket. Dette fungerte mye bedre når en faktisk tok enheten med ut på en runde langs
ruten, som da er tilfelle for en buss.
Rutemodulen håndterer greit utfall av tjenester, den er avhengig av internett for å oppdatere
tidspunkter da en mellomlagring av tidsdata ikke eksisterer. Selve ruten blir mellomlagret, slik at
en rute fint kan starte uten internett. Om en rute ikke er mellomlagret (for eksempel ved første
oppstart) venter enheten til den får internett og oppdaterer ruten så fort som mulig. Dette gjør til at
modulen fint tåler utfall av internett. Når ruten først er startet er rutemodulen helt uavhengig av
internettoppkobling, dog kan den bli litt mindre presis. Det er sjeldent modulen er uten internett i
lengre perioder (en time pluss) så i realiteten skal ikke dette være et problem når det kommer til
nøyaktighet.
Side 31
HPR/D-2015/001 INFOTAINMENT-SYSTEM
4.5 Nyhetsmodul
4.5.1 Teknologi
Sentralt i nyhetsmodulen står det innebygde rammeverket «Toast», i Android er en «Toast» en
måte å vise brukeren en rask melding på skjermen. Nyhetsmodulen er inspirert av denne «Toastfunksjonen», og bygger videre på prinsippene bak denne.
4.5.2 Krav
En kopiering av Toast virkemåten medfører et krav for håndtering av meldinger sendt samtidig.
Modulen trenger en mellomlagrinsfunksjon, slik at ikke to meldinger vises på skjermen samtidig.
4.5.3 Komponenter
Toastobjekt
En klasse som representerer hver enkelt melding, denne har et par satte attributter som kan
defineres. Selve objektet har felt for meldingstekst og varighet, varighet settes for å bestemme
tiden meldingen skal være synlig for bruker. Tre ulike lengder er forhåndsdefinert i koden med
variabelnavn. Dette gjør koden mer ryddig da intervallene for visning gjerne er like for samme
operasjon. I tillegg til tid og meldingstekst er det lagt til en egen variabel for tekstfarge. Et
kodeeksempel for opprettelse av en ny melding kan da se ut som følgende:
new Toast("Melding", Toast.MEDIUM, Color.BLACK);
Klassen har også to konstruktører, dette betyr i praksis at en også kan lage nye meldinger ved å
bruke :
new Toast("Melding", Toast.MEDIUM);
En slipper da å spesifisere en farge (da dette kan være forbeholdt spesielle meldinger).
ToastQueueHandler
Dette er en kø-håndterer som er ansvarlig for å sørge for å opprette nye meldinger i riktig
rekkefølge. Den skal også sørge for at to meldinger ikke vises samtidig på skjermen. Selve klassen
opprettes som en instans i starten av applikasjonen, og kjører så lenge applikasjonen er aktiv.
Hjelperen inneholder en liste av Toasts, og kjører gjennom denne i rekkefølgene de ble lagt til i.
Når en melding vises på skjermen går hjelperen i dvale, her blir den liggende til aktiv melding har
brukt opp sin tid på skjermen, den går så videre med neste melding.
Nyhetsmodul
Nyhetsmodulen er den delen av systemet som brukeren ser, det er denne som har ansvaret for
presentasjonen av meldinger på skjermen. Modulen består av en enkel layout, denne har en
rektangulær boks med en tekstbeholder. Tekstbeholderen endres ved mottak av en ny melding.
Modulen har også en «rullende» effekt for meldinger som har flere tegn enn det som er plass til på
skjermen. Dette betyr at når en større melding kommer inn til modulen, vil den rulle over skjermen
slik som en ofte kan se på nyhetssendinger på NRK og lignende kanaler.
NewsFetcher
Dette en hjelper som sjekker etter oppdateringer. Den består av en RSS5 parser da nyhetskilden
er en ekstern RSS-strøm definert på serveren. Applikasjonen lagrer så adressen til nevnte RSSstrøm sammen med en variabel som definerer hvor ofte den skal sjekke etter oppdateringer. Når
applikasjonen starter leses så nevnte variabler og hjelperen starter jobben. For å forhindre at
samme melding vises flere ganger mellomlagres innholdet i kilden lokalt. Den lokale kopien blir så
sjekket mot den nye kopien hver gang en sammenligning av gammelt / nytt innhold blir utført. Ved
en eventuelt ny melding sender hjelperen denne videre.
Side 32
HPR/D-2015/001 INFOTAINMENT-SYSTEM
4.5.4 Virkemåte
Figur 20: Figur som forklarer virkemåten til nyhetsmodulen.
Selve virkemåten i modulen som en enhet er beskrevet av diagrammet over. «NewsFetcher»
sjekker den eksterne strømmen av nyheter for endringer. Ved en eventuelt endring sender denne
meldingen videre til «ToastQueueHandler» som et «Toast» objekt. «ToastQueueHandler» tar seg
så av visningen av dette ved å sende meldingen videre til nyhetmodulen.
4.5.5 Drøfting og testing
Modulen har vist seg robust og stabil i testene som er utført. Blant annet er modulen kjørt over en
lengre tidsperiode på to til tre dager. I denne perioden har tilgang på internett blitt kuttet periodevis,
modulen har da fungert som forventet og hentet seg inn igjen. Selv om modulen kjøres på en timer
kan en ikke se at dette påvirker ytelsen av selve applikasjonen, det er ingen tegn til hakking når
modulen kjøres asynkront med resten av applikasjonen, selv under mer krevende omstendigheter
(bytting fra mediamodul til kartmodul og så videre). I en test sendes femten meldinger samtidig,
modulen viste da innholdet korrekt ved å ikke duplisere meldinger på skjermen. Modulen dropper
også meldinger om det er et stort antall meldinger som blir sendt på en gang, dette for å ikke
oversvømme brukere i informasjon, ved mye informasjon på et kort tidsrom er årsaken mest
sannsynlig en feil. Det er da unødvendig å vise et stort antall meldinger over en større tidsperiode.
Modulen viser da første melding, men venter med neste til køen av meldinger får litt mellomrom.
Side 33
HPR/D-2015/001 INFOTAINMENT-SYSTEM
4.6 Mediamodul
MediaModule er en komponent i applikasjonen som gir mulighet til å spille av media, som for
eksempel reklame. Visuelt representert er modulen bare et svart vindu som spiller av film, men
internt har den mange flere oppgaver, som synkronisering av filer og avspillings-logikk.
Figur 21: MediaModule som spiller av et klipp med UiA logoen
4.6.1 Teknologi
Medieavspiller
Android sitt multimedia-rammeverk tilbyr mange ferdige muligheter for avspilling av media. Android
MediaPlayer klassen dekoder og spiller av de mest brukte videoformatene, så dette ble et naturlig
valg i prosjektet. Det brukes en klasse som heter VideoView som er et ferdig Android view knyttet
til en MediaPlayer, noe som gjør det enklere og kjappere for oss å ta det i bruk.
Nedlasting / synkronisering
Android har allerede funksjonalitet for nedlastninger via sin DownloadManager-tjeneste.
DownloadManager bruker http protokollen for nedlasting, og derfor ble http et lett valg. Android
tilbyr også et rammeverk for synkronisering «Android SyncAdapter Framework». SyncAdapterrammeverket sørger for at synkronisering blir gjort i en bakgrunnsprosess, og tilbyr i tillegg
løsninger for blant annet tidsbestemt synkronisering. Oppkopling til server og sammenligning av
data er overlatt til bruker av rammeverket. Det ble tatt en avgjørelse om å ikke bruke SyncAdapter
rammeverket, da dette sparte gruppen veldig lite tid.
Dataformater
JSON6 – Vi bruker JSON-formatet for utveksling av informasjon mellom applikasjonen og server
backend
SHA-17 – For å verifisere filer litt mer grunnleggende enn ved å bare sjekke filnavn bruker vi SHA1
hash8 checksum9
Side 34
HPR/D-2015/001 INFOTAINMENT-SYSTEM
Lagring
SharedPreferences – Android sitt SharedPreferences grensesnitt blir brukt for lagring av
opplysninger i JSON-format.
Parsing
I prosjektet nyttes GSON (se liste over biblioteker) til å håndtere JSON. GSON ble brukt fordi dette
egnet seg godt til lagring av data i et bestemt format, i vårt tilfelle JSON. Fordelen med å bruke
JSON til lagring er at en da kan lagre verdiene i et objekt som en JSON tekst. En kan da senere
gjenopprette tilstanden til dette objektet ved å lese tekstinformasjonen som JSON.
4.6.2 Krav
Da det brukes Android DownloadManager som krever HTTP-nedlastninger, må server backend
tilby nedlasting via HTTP-protokollen. Videofiler som ønskes å spilles av må være enkodet i et
format som støttes av Android MediaPlayer.
4.6.3 Komponenter
SyncService
SyncService er en service med ansvar for å holde applikasjonens lokale mediedata oppdatert i
forhold til serveren. SyncService er nærmere bestemt en IntentService, den kjører ikke i
bakgrunnen hele tiden, men i stedet blir den kjørt hver gang noe oppdateres i server backend og
ved applikasjons start.
Når SyncService startes kontakter den server backend for en liste over filer som den er forventet
å ha lagret lokalt. Den mottar et JSON objekt med en rute ID, og en liste over filnavn / sha1
checksum par. Det er nødvendig å sjekke på checksum hash i tillegg til filnavn, fordi det er veldig
vanlig at man trenger å gjøre en endring på en eksisterende fil, som da får det samme navnet. I
tillegg har noen filer som synkroniseres alltid samme navn, en er da nødt til å vite mer om filen enn
bare navnet. SyncService sjekker så tilsvarende liste lokalt på enheten, og sammenligner disse.
Det sjekkes hvilke filer som finnes eksklusivt lokalt, disse skal slettes, mens filer som eksklusivt
finnes på server skal nedlastes.
Når SyncService har en liste over filer som skal nedlastes kan en forberede nedlasting, til dette
brukes Android sin egen tjeneste DownloadManager. SyncService sender en forespørsel til server
backend med filnavn og sha1 hash, og får tilbake den riktige filen fra serveren, som
DownloadManager setter til nedlasting. Når en nedlasting startes i DownloadManager returneres
en ID som brukes som en referanse mot DownloadManageren. DownloadManager håndterer
nedlastninger asynkront og uavhengig av vår applikasjon, og derfor må det finnes en måte å
bokføre nedlastninger til senere tidspunkt. SyncService vil avslutte sitt arbeid så fort nedlastninger
er sendt til DownloadManager, i tillegg kan det hende at applikasjonen resettes før alle
nedlastninger er ferdig. En må da lagre tilstand om nedlastninger på langtidsminnet. Det er
opprettet en klasse QueuedDownload som holder informasjon om filnavn, Sha1 hash, tidspunkt
for oppstart, og nedlastings ID. Det lagres en liste med QueuedDownload i Android
SharedPreferences, slik at neste gang SyncService kjører så kan den sjekke status for
nedlastninger.
Til slutt lytter applikasjonen på broadcasts fra DownloadManager, slik at når en nedlasting har en
statusoppdatering kjører SyncService i en spesiell modus der den bare forespør
DownloadManager om nedlastninger, og sjekker om dette gjelder en av nedlastningene på sin
egen liste.
Side 35
HPR/D-2015/001 INFOTAINMENT-SYSTEM
Om en nedlasting er ferdig vil SyncService flytte den fra en midlertidig nedlastningsmappe til den
designerte mediemappen, sammen med andre mediefiler. Om nedlastingen feilet så slettes den,
og kjører en ny synkronisering mot server. Uansett om nedlastingen feilet eller ble fullført, så kan
SyncService fjerne den fra sin interne liste over nedlastninger. Siden SyncService hele tiden
sjekker både filnavn og sha1 checksum, vil korrupte nedlastninger bli håndtert automatisk. Dette
fordi en korrupt nedlasting ikke vil ha samme checksum som originalfilen.
MediaManager
MediaManager er en service med ansvar for å styre medieavspilling i applikasjonen. Den holder
orden på hvilke filer som er nedlastet av SyncService, hvilke filer som er mediefiler, og i tillegg tilbyr
den viktig logikk for selve avspillingen. MediaManager kjøres i bakgrunnen så lenge applikasjonen
lever. MediaManager tilbyr to ulike måter å spille av media; tidsbestemt avspilling, og
forhåndsbestemt avspilling. Begge metodene krever at den kallende komponenten gir
MediaManager en MediaPlayerModule som den kan spille til.
Tidsbestemt avspilling
Tidsbestemt avspilling var den første avspillingsmetoden som ble laget til MediaManager, denne
tilbyr en enkel «on demand» måte å spille vilkårlig media på. Tanken bak dette var at under
strekninger i ruten der kartinformasjon ikke er viktig for passasjerer, kan det spilles av
reklamesnutter i en bestemt tid. Om en for eksempel har ca. 45 sekunder til neste stopp, kan en
vise 30-35 sekunder reklame uten at viktig informasjon blir utelatt. Denne metoden krever at en
kallende komponent tar seg av logikken. MediaManager ordner selv en passende spilleliste og
spiller denne av.
Når MediaManager mottar en forespørsel om å spille i en bestemt tid, sjekker den lokal lagring for
mediefiler, og sorterer disse basert på tid. Deretter plukker den ut en etter en fil, og sjekker hele
tiden at en ikke overgår ønsket tid. I så fall prøver den en annen fil i stedet inntil den finner en liste
over film der totaltiden ikke overgår ønsket tid.
Som standard plukker metoden ut filmer fra midten av søkelisten, altså den plukker ut filen med
median lengde. Om filmen er for lang hopper den et hakk mot starten av søkelisten der en kortere
film ligger. Problemet som oppstår da er at det som oftest velges de samme filene hver gang. Det
ble lagt til to ekstra moduser, en der metoden begynner fra slutten av søkelisten, og dermed velger
færre men lengre filmer, og en der en begynner fra starten av søkelisten, og dermed velger flere
men kortere filmer.
Dette ble gjort fordi funksjonen var enkel, samtidig så en fikk litt variasjon i spillelistene. Grunnen
til at det ikke bare ble kjørt helt tilfeldig utvalg var fordi at i en sortert søkeliste kan metoden effektivt
finne en film av passende lengde. Dette er ikke tilfelle i en usortert liste, og funksjonen hadde da
brukt lengre tid for å finne en passende fil.
Til slutt ble det lagt inn en modus der modulen hele tiden velger en vilkårlig film fra søkelisten. Den
sjekker så om den er innenfor tidsrammen. Om spillelisten ikke er passende, fjernes den fra
søkelisten slik at neste søk ikke prøver det samme om igjen.
Side 36
HPR/D-2015/001 INFOTAINMENT-SYSTEM
Forhåndsbestemt avspilling
Forhåndsbestemt avspilling er en avspillingsmetode som lar brukere av applikasjonen definere en
forhåndsbestemt liste av mediefiler som skal spilles av ved bestemte punkter langs ruten. Den
abonnerer på «proximity alerts» fra LocationService-tjenesten for å vite når et spesifikt punkt er
nådd. Denne metoden håndterer selv logikk for bytting av moduler.
Når MediaManager mottar en forespørsel om å spille rutens forhåndsbestemte liste av mediefiler
krever den et «callback interface» som den kan bruke for å kommunisere med den kallende
klassen. På denne måten kan MediaManager gi beskjed om når avspilling skal starte, og dermed
kan den kallende komponenten klargjøre for avspilling. Selv om metoden inneholder logikken for
bytting av moduler, så krever den at den kallende komponenten selv utfører selve byttingen av
modulen når den ber om det. Dette er først og fremst fordi bytting av moduler kan innebære flere
prosedyrer som ikke ligger innen omfanget av MediaManager. Metoden registrerer seg deretter
hos LocationService for «proximity alerts». Fra nå av vil MediaManager motta en beskjed hver
gang kjøretøyet nærmer seg forhåndsbestemte punkter langs ruten.
Når MediaManager mottar kall om at et punkt er nådd, sjekker den en intern liste som inneholder
parvis punkt-ID, og en tilhørende liste over eventuelle filer som skal avspilles. Om det finnes filmer
som skal avspilles, sender den en forespørsel til komponenten som kalte avspillingsmetoden om
å forberede seg for avspilling. Siden dette skjer på UI tråden, altså asynkront for MediaManager,
og siden MediaManager trenger en MediaPlayerModule å vise film på, så registrerer
MediaManager enda et «callback interface» hos UI komponenten, som igjen sender tilbake
MediaPlayerModule når den er klar for å starte avspilling. Deretter kan MediaManager spille av
listen som vanlig.
Når avspilling av en punkt-spesifikk spilleliste er ferdig, sender MediaManager en beskjed til UI
komponenten om at avspilling er ferdig, og UI komponenten kan bytte tilbake til ønsket modul.
Denne prosessen kjøres om igjen for hvert punkt i ruten som nås. Om modulen når et punkt med
planlagt avspilling, mens en tidligere avspilling fortsatt holder på ignorerer MediaManager
forespørselen. Dette først og fremst fordi proximity alerts ofte kan trigge flere ganger for et punkt,
og duplikater i køen kan oppstå. Alternativet hadde vært å lage en sjekk for dette, og lage en kø
over lister / filmer som skal spilles av, men overlapping av avspilling i dette tilfellet er et tegn på
dårlig design av den forhåndsbestemte listen, eller teknisk feil.
Det er også om mulig ønsket å la avspillingsmetoden bruke tidsbestemt avspilling for å spille av
vilkårlige filmer med en viss lengde på bestemte punkter, når det ikke er viktig hva som blir avspilt.
Skanning for filer
MediaManager må holde seg oppdatert over hvilke filer som finnes lokalt på enheten for å kunne
vite hva som skal spilles av. Hver gang en avspillingsmetode blir kalt, skanner MediaManager den
designerte mediamappen for filer, og sjekker om de er en mediefil. Om filen er en video, opprettes
et objekt av MediaFile klassen, som wrapper en Java File men i tillegg legger til videolengde. Det
var planlagt at en også skulle ta hensyn til bildefiler, men siden Android VideoView ikke har
ferdigbygd funksjonalitet for å vise bilde i en gitt tid, så ble dette nedprioritert. I tillegg til å skanne
for mediefiler, sjekker også MediaManager for en spilleliste for ruten. Denne spillelisten blir brukt i
forhåndsbestemt avspilling.
MediaPlayerModule
MediaPlayerModule er en simpel wrapper rundt et Android VideoView. Dette er selve spilleren som
blir synlig i modulvinduet når applikasjonen skal spille film.
Side 37
HPR/D-2015/001 INFOTAINMENT-SYSTEM
Backend
Server / backend delen av MediaModule består av noen simple PHP skript som lar applikasjonen
sjekke hvilke filer som finnes, og be om nedlasting. Først et skript kalt getContentInfo.php som tar
en rute ID som parameter, og sjekker en tilsvarende mappe spesifikk for ruten. Hver rute har en
egen mappe med forskjellige mediefiler, og en spilleliste om dette skal brukes. Skriptet returnerer
så et JSON objekt for ruten, som inneholder en liste over filnavn og sha1 checksum par. Deretter
tar et skript kalt Downloader.php, inn et filnavn og en sha1 hash som parameter, og returnerer filen
man spør etter.
4.6.4 Virkemåte
Sammen jobber de forskjellige komponentene for å kunne vise oppdaterte reklamesnutter på
fornuftige tidspunkt. Diagrammet under viser en typisk flyt i det som til sammen utgjør
MediaModule.
Figur 22: Figuren forklarer virkemåten til Media-modulen.
SyncService sjekker innholdet på både backend og den lokale mediamappen, så velger den ut
eventuelle filer som skal nedlastes, og delegerer nedlastingen til DownloadManager.
DownloadManager laster ned filene fra backend, og lagrer disse i en midlertidig nedlastingsmappe.
Når DownloadManager er ferdig med en nedlasting sjekker SyncService filene, og flytter de til den
designerte mediamappen. ModuleHandler ber MediaManager om å kjøre forhåndsbestemt
avspilling for ruten.
Side 38
HPR/D-2015/001 INFOTAINMENT-SYSTEM
MediaManager abonnerer så på proximity alerts fra LocationService, og sjekker innholdet i den
designerte mediamappen. Her ser den også etter en spillelistefil som den parser og beholder for å
sjekke opp mot. Når en proximity alert blir sendt, og MediaManager har en spilleliste for punktet,
ber MediaManager ModuleHandler om å gjøre seg klar for avspilling. Det vil si at den oppretter en
MediaPlayer, samt gjør denne synlig, og sende en referanse til MediaManager. Deretter kan
MediaManager spille av spillelisten til MediaPlayer. Når den er ferdig sendes det en beskjed til
ModuleHandler om at avspilling er ferdig, og dermed kan MediaPlayer modulen byttes ut med noe
annet inntil videre.
4.6.5 Forbedringer
Selv om det hele tiden ble forsøkt å gjøre et solid grunnarbeid og lagt til rette for fremtidig utvidelse
av applikasjonen, finnes det alltid rom for forbedringer. Noen steder måtte en ofre kvalitet på grunn
av tidsmangel, og andre steder ble det gjort ikke-optimale designvalg fordi deltagerne manglet
erfaring.
MediaModule baserer seg på oppkopling til en ekstern server for å holde seg oppdatert på
mediafiler, og en har i prosjektets periode ikke tatt hensyn til sikkerhet med tanke på
dataoverføring. Det betyr ikke at modulen er designet på en slik måte at dette ville være vanskelig
å gjøre noe med, men det har ikke vært en prioritet. Dette er noe en absolutt måtte ha tenkt på om
applikasjonen skulle blitt brukt i praksis, siden det er kritisk at ingen lett kan laste opp uønsket
innhold til enhetene.
Modulen skulle også ideelt sett ha kunnet vise bildefiler likt som film, om et selskap ønsker reklame
i applikasjonen med bruk av et bilde må en gjøre bildet om til en film-fil. Grunnen til bilder ikke kan
vises for øyeblikket er at Android VideoView som brukes til avspilling av media, ikke har en
innebygget metode for å vise bilder. Det ble derfor valgt å ikke bruke tid på dette.
Mange innstillinger og variabler må endres i koden, for de fleste innstillinger brukes det statiske
konstanter. Dette fordi en ikke har hatt tid til å binde disse opp mot backend. Dette er noe som er
lett å endre på, men det tar tid og er ikke blitt prioritert.
Side 39
HPR/D-2015/001 INFOTAINMENT-SYSTEM
4.7 Server
4.7.1 Teknologi
Utviklingsarbeidet ble gjort ved hjelp av CSS10, HTML11, PHP12, MySQL13 og JavaScript14.
Systemet ønskes kjørt på en Linux tjener, og da er Microsoft sin teknologi ikke hensiktsmessig.
Prosjektdeltagerne har fra studiene mest erfaring innen Microsoft sine produkter for webutvikling
som C#15 og ASP.NET16. Det er derfor en overgang for deltagerne å få prøve seg på teknologier
som PHP og JavaScript. Den tekniske utfordringen var av moderat karakter, noe som var en fin
begynner-utfordring for gruppen.
4.7.2 Krav
Systemet er ment å være vedlikeholdsfritt i den grad at teknikere ikke skal måtte rykke ut for å
utføre arbeid på selve enheten. Dette innebærer i praksis at fjernstyring må være mulig. Innhold
må også kunne byttes ut, samtidig som status og innstillinger må kunne leses og settes fra en
ekstern lokasjon. Nevnte krav ga grunnlag for å lage et felles kontrollsenter for alle enhetene i
systemet. Et webgrensesnitt er en universalt lett og grei måte for operatøren og holde kontroll på
systemet uten installasjon av ekstern programvare.
4.7.3 Virkemåte
Systemet fungerer ved hjelp av Google GCM og webteknologien nevnt ovenfor. Google GCM er
Google sitt API for Cloud Messaging for Android. Dette er et system for samhandling av data
mellom flere enheter fra en sentral server. Dette fungerer ved hjelp av et sentralt register, der alle
enheter har en unik adresse. Fordelen med dette systemet er at en som utvikler ikke trenger å
holde kontroll på IP-adresser for å kunne utveksle informasjon fra server / klient. Dette er særs
gunstig i vår situasjon, da enheten bruker en mobil oppkobling, og faste IP adresser er vanskelig
å få til.
Figur 23: Illustrasjon over hvordan Google GCM fungerer.
En kan da si at GCM er bindeleddet mellom applikasjon og server. I selve løsningen brukes GCM
hyppig til alt av kommunikasjon mellom server og klient. Hovedfunksjonene i
administrasjonsdelen består av konfigurasjon og mediehåndtering. Innstillinger blir sendt via
GCM til enheten, og lagret der til senere bruk, det er også bygget inn mulighet for nedlasting av
nytt mediainnhold til bruk i reklamemodulen. En snakker da om bilder, film og eventuelt musikk.
Side 40
HPR/D-2015/001 INFOTAINMENT-SYSTEM
4.7.4 Komponenter
Figur 24: Illustrasjon av innloggingsportalen
Løsningen er beskyttet med passord, den benytter en modifisert versjon av PHP-sessions17, for å
holde på innloggede brukere. Denne funksjonen er modifisert, slik at bakmenn ikke kan få tak i
cookie18 som blir lagret i nettleseren ved hjelp av et XXS19-angrep. Det regenereres også
sesjons-ID for hver unike side for å unngå overtagelse av brukerens sesjon. I tillegg er det lagt
inn en «bruteforce20-funksjon», som hindrer brukeren i å prøve mange forskjellige passord. En
bruker stenges automatisk ute av systemet etter at den har skrevet feil passord fem ganger.
Alle passord er «hashet» og kryptert, ved hjelp av en unik «salt21» i databasen. Dette hindrer
administratorer og andre å se passord i klartekst. Dette betyr også at et eventuelt innbrudd, og
dumping av databasen, ikke gir angriperen en database full av passord i klartekst.
Figur 25: Illustrasjon av innloggingsportalen
Det første som møter brukeren er en oversikt over alle enhetene i systemet. Hver enkelt enhet
har som «1» (ref fig. 21) viste en unik ID, det er på denne måten systemet skiller de forskjellige
enhetene fra hverandre. Enheten har også en lokal kopi av sin ID, slik at denne vet hvilken enhet
den er i forhold til serveren.
Side 41
HPR/D-2015/001 INFOTAINMENT-SYSTEM
I listen kan brukeren få en rask oversikt over navn, rute og selskap enheten hører til. Ved hjelp av
«Edit-knappen» «2», kan brukeren justere innstillinger per enhet. Statusikonet «3» fungerer som
en markør på om enheten er funksjonell eller ikke.
Enheten registreres i listen ved første oppstart automatisk, dette betyr i praksis at installatør ikke
trenger gjøre noe mer enn å installere applikasjonen på enheten den skal kjøre på. Registrering
gjøres automatisk, deretter kan operatør konfigurere enheten fra en hvilken som helst plassering
Figur 26: Illustrasjon over konfigurasjon av enhet.
Videre i løsningen er konfigurasjonen for hver enkelt enhet. Ovenfor er et skjermbilde av
enhetsinnstilingene på serveren. Det er her operatøren kan sette spesifikk konfigurasjon for hver
enkelt enhet.
1. Innstillinger: I panelet kan en juster forskjellige innstillinger per unike enhet. En kan gi
enheten et unikt navn, slik at denne lett kan identifiseres i senere tid. Et logisk eksempel,
kan her være «Tide, Buss 26 – bak». En kan også definere hvilket selskap enheten tilhører, og derav kan en også sette en unik rute tilhørende valgt selskap. På denne måten
kan en enkelt skille mellom ulike selskap, dette gir rom for å utvide løsningen med for eksempel ulike reklame-tilbud per busselskap. I innstillingene kan en også bestemme hvilke
moduler applikasjonen skal benytte, samt sette hvilken kilde som skal brukes til nyheter.
2. Sende innstillinger: Etter en har endret innstilingene bruker man lagre-knappen for å enkelt sende konfigurasjonen til enheten. Når enheten mottar en ny konfigurasjon vil den
automatisk starte på nytt, slik at endringene trer i kraft med en gang.
3. Sende ny media: Om en har endret reklametilbudet, ved å for eksempel legge til en ny
reklamefilm kan en enkelt fortelle enheten at den skal oppdatere seg ved hjelp av «Resync media» knappen. Denne ber enheten sjekke lokale filer mot eksterne filer på serveren ved neste anledning.
4. Sende melding: Enheten støtter nyhetsmeldinger på skjermen, dette kan enten settes
som en RSS-strøm, eller eventuelt brukes som et meldingssystem der en operatør kan
sende inn viktige meldinger til brukere. Boksen på bildet er en test-funksjon for demonstrasjon av løsningen.
Side 42
HPR/D-2015/001 INFOTAINMENT-SYSTEM
4.7.5 Forbedringer
Om produktet skal brukes i et aktivt system må det gjøres en del tekniske endringer. Blant annet
bør det være mulig å definere selskaper, ruter og mediehåndtering internt i løsningen. I dag løses
dette ved å editere databasen, dette fungerer utmerket for vår prototype, men er ikke en god
løsning for et produkt i produksjon, der operatør enkelt skal kunne håndtere systemet.
Designet legger også opp til status på ulike funksjoner som mobil-oppkobling, sync-status, GPSog API-tilkoblinger. Disse er ikke implementert i løsningen på grunn av prioriteten satt opp i
forstudieprosjektet.
Det kan også være aktuelt å implementere et styringssystem for applikasjonen på nett, slik at
ulike selskaper kan ha ulike profiler for visning. For eksempel ønsker kanskje et selskap å ha
reklame før hver holdeplass, og ikke vise så mye kart. Dette bør kunne settes på enhet eller
selskaps-nivå.
4.7.6 Drøfting og testing
I utviklingen av løsningen ble det valgt Google GCM for utveksling av informasjon mellom klient /
server. Det var flere ulike måter dette problemet kunne blitt løst på, for eksempel kunne en valgt
direkte kommunikasjon mellom server klient, men dette hadde ikke resultert i en like enkel
løsning. En måtte da selv holdt kontroll på IP-adresser og endringer her. Samtidig måtte en ha
utviklet en metode for å håndtere leveringer som ikke gikk gjennom, ved for eksempel utfall av
internett. Selve designet er basert på Bootstrap (se liste over biblioteker), dette er en «mal» som
er responsiv, enkel i bruk og innehar gode elementer for et ryddig og pent design. Ved å bruke en
ferdig løsning designmessig, ble det spart mye tid som ga oss muligheten til å fokusere på
utviklingsaspektet.
I testene deltagerne har utført på løsningen har den fungert ypperlig, blant annet er løsningen
testet mot enheter med og uten internett for å sjekke at alt fungerer etter spesifikasjonene. Alle
GCM-meldinger som ble sendt fra serveren kom frem til enheten så fort denne fikk tilgang på
internett. I praksis vil dette bety at endringer gjort på serveren kan bli noe forsinket, men dette
bør ikke være et stort problem. Det kan også være aktuelt å utvikle et system for feilhåndtering,
der oppringning eller SMS kan tvinge enheten til å resette seg, for eksempel kan dette være
aktuelt om enheten henger seg og ikke kobler seg på nett automatisk.
Testen av løsningen tar sikte på å avdekke avvik, eller forsinkelser i leveranse av meldinger
mellom server / klient. I testen kobles enheten opp mot en mobiltelefon. Denne telefonen deler
internett via et trådløst aksesspunkt. Dette skal simulere en mobil-oppkobling. For å få testet
ulike dekningsforhold som oppstår langs en rute, tvinges mobiltelefonen over på ulike
nettverksmoduser som: GSM, WCDMA (3G) og LTE (4G). Det ble også testet hvor lang tid det
tar for Google å levere en melding etter et utfall av tjenestene. I diagrammet under kan en se
resultatet fra teksten. Alle tall er oppgitt i sekunder.
Side 43
HPR/D-2015/001 INFOTAINMENT-SYSTEM
RESPONSTEST GOOGLE GCM
Forsøk 5
Forsøk 4
Forsøk 3
Forsøk 2
Forsøk 1
Forsinket levering
GSM
WCDMA (3G)
LTE (4G)
0
Forsøk 5
2
LTE (4G)
0,6
4
WCDMA (3G)
0,5
6
8
Forsøk 4
0,5
0,5
0,6
8
Forsøk 3
0,5
0,6
0,5
10
Forsøk 2
0,5
0,5
0,5
11
Forsøk 1
0,5
0,5
0,5
8
GSM
0,5
10
Forsinket levering
9
12
Figur 27: Test av responstid GCM
Utfra diagrammet kan en se at svartiden er svært lav, under alle moduser leverer GCM
meldingene raskt og effektivt. Ved forsinket levering er løsningen også svært raskt, her forsvinner
mesteparten av tiden til å registrere seg på nettverket, noe som vil variere fra enhet til enhet.
Testene er gjort under gode dekningsforhold, så en må forvente en noe lengre responstid om
dekningen er dårlig. Meldingene som sendes mellom server / klient er små, dette medfører at
selv GSM dekning gir gode resultater.
Side 44
HPR/D-2015/001 INFOTAINMENT-SYSTEM
5 Diskusjon
Generelt sett er prosjektdeltagerne fornøyd med det ferdige produktet. Applikasjonen møter alle
krav satt opp i kravspesifikasjonen. Løsningen leverer også alle funksjoner som er definert som
ønsker i forstudierapporten. I utgangspunktet sto deltagerne fritt i valg av plattform, Android var da
systemet som ble valgt av flere ulike grunner. Android er et rammeverk som var kjent for gruppen,
og en hadde allerede en oversikt over mulighetene som var tilgjengelige her. Dette kombinert med
et økende marked for billig fastvare avgjorde valget.
Alternativene var mange, en kunne utviklet noe i C++ kjørende på Linux, eventuelt kunne en laget
en ren Java applikasjon eller en applikasjon i et hvilket som helst annet språk. Fordelen ved å
velge et rammeverk som Android var at mange avanserte oppgaver allerede er ferdiglaget i, en
snakker da om oppkobling mot WIFI, mobilnett, GPS, design og layoutverktøy. Dette kombinert
med en veldig god dokumentasjon gjorde Android til et godt valg. Gruppen er veldig fornøyd med
valg av plattform, og mener den er særs godt egnet til den type arbeid som er gjort i dette prosjektet.
I prosjektperioden har deltagerne økt sin kompetanse innen programvareutvikling, da spesielt
innenfor Android. Deltagerne har blitt godt kjent med virkemåten til operativsystemet, og har
spesielt lært mye om nettverk, kart og GPS. Feilsøking, virkemåte og struktur er også områder
hvor deltagerne føler de har utviklet seg. Serversiden av produktet er utviklet i PHP noe som var
helt nytt for alle deltagere. Her er gruppen veldig godt fornøyd med resultatet, da en har lært veldig
mye nytt om syntax, struktur og oppbygning av nettsider ved hjelp av PHP.
Gruppen har også lært mye om prosjektplanlegging, derav Scrum og arbeidsmetodene tilhørende
dette. Deltagerne er svært fornøyd med JIRA som arbeidsverktøy, og ser fordelene et slikt system
gir prosjektet.
Det tok også litt tid for prosjektgruppen å oppdrive nødvendig fastvare, samt koordinater / GPSdata til testing. Vår veileder hos Red Rock gikk ut i pappapermisjon, derfor var det i denne perioden
redusert kommunikasjonen mellom oppdragsgiver og prosjektgruppe. Vi ble da tildelt en ny
veileder, og ting løste seg.
Om gruppen skulle startet prosjektet på nytt ville ting sett relativt likt ut. En ting som ble oppdaget
litt sent er at Google Maps er litt problematisk da det blant annet ikke støtter mellomlagring av kart
lokalt på enhet, dette betyr i realiteten at alt av kart må lastes ned i det øyeblikk det skal brukes,
dette fungerer dessverre dårlig på et system som ikke alltid har garantert tilgang på internett. I
tillegg gjør det også at innlastningen av kartet går litt sent når en beveger seg langs en rute. Selve
kartet består av «firkanter», hver firkant er en del av kartet som vises på bildet. Når dette er i
bevegelse gjør hentingen av nye kartdata at en får hvite streker som blinker raskt når kartet
oppdaterer seg, dette da fordi systemet bruker litt tid på å hente ned siste kartdata som er
nødvendig. Dette går utover helhetsinntrykket av løsningen. Alternativer som OpenStreetMap [15]
kan gjøre en bedre jobb her, og bør være en kandidat for å forbedre dette problemet. Nevnte
løsning åpner også opp for å mellomlagre kartdata.
Side 45
HPR/D-2015/001 INFOTAINMENT-SYSTEM
6 Konklusjon
Problemet som ble løst var å utvikle et infotainment system til bruk i buss eller lignende kjøretøyer.
Systemet skulle benytte lavkost fastvare, og derfor være billigere å produsere enn alternative
løsninger med kraftigere maskinvare. Løsningen som ble utviklet er skrevet for bruk med
operativsystemet Android, den er skalerbar og modulbasert. Den fungerer godt på testenheten
som skal simulere den faktiske enheten som er valgt til bruk sammen med prosjektet. En av
utfordringene var å finne en enhet som tilfredsstilte alle krav til fastvare, dette mener
prosjektgruppen at den har funnet. Løsningen er kapabel til å servere brukerne nyheter, kart og
rutedata samt reklame og media. Testene som er utført av produktet viser at det er en fungerende
prototype. Dette mener prosjektdeltagerne beviser at et komplett Infotainment-system er fullt mulig
å utvikle ved hjelp av Android og billig fastvare.
Problemeier RedRock kan nytte dette som et konkurransefortrinn i markedet, billige enheter gir
mer fortjeneste og/eller flere kunder. Videre arbeid kan blant annet ta sikte på å integrere en annen
kartløsning som støtter mellomlagring av data, samtidig som det kan gi brukeren en visuelt bedre
opplevelse. Design kan også dra nytte av litt oppgradering, samtidig som rutemodulen gjerne kan
implementeres sammen med faktiske rutedata for mer nøyaktig ruteinformasjon.
Side 46
HPR/D-2015/001 INFOTAINMENT-SYSTEM
Bibliografi
[1] A. management, «Adibus,» -, - - -. [Internett]. Available: http://adibus.dk/en-produkter.html.
[Funnet 13 04 2015].
[2] A. Bender, «Computerworld,» 27 Oktober 2014. [Internett]. Available:
http://www.computerworld.com.au/article/558239/teched-developing-internet-things-cheapchips/.
[3] «Wikipedia,» Wikimedia Foundation, 12 04 2015. [Internett]. Available:
http://en.wikipedia.org/wiki/Raspberry_Pi. [Funnet 13 04 2015].
[4] E. Brown, «Linux.com,» Linux Fundation, 02 Februar 2015. [Internett]. Available:
https://www.linux.com/news/embedded-mobile/mobile-linux/807087-faster-raspberry-pi-2says-yes-to-ubuntu-and-windows-but-wheres-android. [Funnet 13 04 2015].
[5] G. Android, «Android.com,» Google, - - 2015. [Internett]. Available:
http://www.android.com/wear/. [Funnet 13 04 2015].
[6] G. Android, «Android.com,» Google, - - 2015. [Internett]. Available:
http://www.android.com/auto/. [Funnet 13 04 2015].
[7] G. Android, «Android.com,» Google, - - 2015. [Internett]. Available:
http://www.android.com/tv/. [Funnet 13 04 2015].
[8] F. Velloso, «http://fabiovelloso.com.br/,» 05 05 2014. [Internett]. [Funnet 20 05 2015].
[9] Google, «Android Developers - Input Controls,» Google, - - -. [Internett]. Available:
https://developer.android.com/guide/topics/ui/controls.html. [Funnet 16 05 2015].
[10] Google, «developer.google.com,» 2015. [Internett]. Available:
http://developer.android.com/. [Funnet 06 05 2015].
[11] Google, «developer.google.com/maps,» 2015. [Internett]. Available:
https://developers.google.com/maps/documentation/android/. [Funnet 23 04 2015].
[12] Google, «developers.google.com - LocationManager,» 2015. [Internett]. Available:
http://developer.android.com/reference/android/location/LocationManager.html. [Funnet 10
05 2015].
[13] Google Sketchup, «3DWarehouse - 3D Bus model by Asiastar bus,» Caulan, - - -. [Internett].
Available: https://3dwarehouse.sketchup.com/model.html?id=u3b7b7188-54b4-4295-92be363bb3fe9d1c. [Funnet 16 01 2015].
[14] Google, «Developers Google,» 2015. [Internett]. Available:
https://developers.google.com/maps/documentation/directions/. [Funnet 2015].
[15] OpenStreetMap, «OpenStreetMap Android,» 2015. [Internett]. Available:
http://wiki.openstreetmap.org/wiki/Android. [Funnet 05 05 2015].
[16] SolidRun, «SolidRun Products I2,» 10 05 2015. [Internett]. Available: https://www.solidrun.com/product/cubox-i2/. [Funnet 20 05 2015].
[17] DX, «DealExtreme OursPop,» 2015. [Internett]. Available: http://www.dx.com/p/mk8080bdual-core-android-4-1-google-tv-player-w-bluetooth-1gb-ram-8gb-rom-tf-hdmi-black175870#.VWRkp0_tlBc. [Funnet 20 05 2015].
Side 47
HPR/D-2015/001 INFOTAINMENT-SYSTEM
Side 48
HPR/D-2015/001 INFOTAINMENT-SYSTEM
Figurer
Figur 1: Illustrasjon over SCRUM arbeidsteknikk. [8] .................................................................... 8
Figur 2 En samling av kompontenter fritt tilgjengelig i Android. [9] ............................................. 12
Figur 3 Illustrasjon av "callbacks" / "interfaces" sin virkemåte. .................................................... 13
Figur 4: Illustrasjon av tiltenkt løsning montert i en buss. [13] ...................................................... 16
Figur 5: Montering av enhet på baksiden av monitor. .................................................................... 16
Figur 6 Hoved-node med integrert mobildata. ................................................................................ 17
Figur 7: Ekstern WiFi-enhet med moduler over WiFi. ................................................................... 17
Figur 8: Flere moduler på samme skjermflate. ............................................................................... 17
Figur 9: Rutemodul (venstre) kombinert med kartmodul. .............................................................. 18
Figur 10: Eksempel på en toast. ...................................................................................................... 18
Figur 11 i2 Solidrun [16] ................................................................................................................ 19
Figur 12 MK808B – Ourspop [17] ................................................................................................. 19
Figur 13: Figuren simulerer virkemåten til "LocationService" ...................................................... 20
Figur 14: MapModule vist til høyre ................................................................................................ 22
Figur 15 Oversikt over virkemåten til kartmodulen. ...................................................................... 24
Figur 16: Illustrasjon av rutemodulen. Nummerert for henvisninger i teksten............................... 26
Figur 17: Figur som forklarer virkemåten til klassen "GetRouteData" .......................................... 28
Figur 18 Figur som forklarer virkemåten til "GeoDirection" klassen. ........................................... 29
Figur 19: Figur som illustrerer sammenhengen mellom alle komponentene i modulen. ............... 30
Figur 20: Figur som forklarer virkemåten til nyhetsmodulen. ........................................................ 33
Figur 21: MediaModule som spiller av et klipp med UiA logoen .................................................. 34
Figur 22: Figuren forklarer virkemåten til Media-modulen. .......................................................... 38
Figur 23: Illustrasjon over hvordan Google GCM fungerer. .......................................................... 40
Figur 24: Illustrasjon av innloggingsportalen ................................................................................. 41
Figur 25: Illustrasjon av innloggingsportalen ................................................................................. 41
Figur 26: Illustrasjon over konfigurasjon av enhet. ........................................................................ 42
Figur 27: Test av responstid GCM .................................................................................................. 44
Side 49
HPR/D-2015/001 INFOTAINMENT-SYSTEM
Vedleggs liste
Vedlegg A – Terminlogi
Forklaring av begreper, ord og uttrykk.
Vedlegg B - Designutvikling
Oversikt over designendringer fra utkast til ferdig versjon.
Vedlegg C - Møtereferater
Møtereferater fra veiledningstimer med veileder.
Vedlegg D – Gannt
Gannt diagram som viser fristende i prosjektet.
Vedlegg E – Timelister
Timelister illustrer tid brukt på spesifikke oppgaver i prosjektperioden. I tillegg til listen i dokumentet
er det vedlagt to komplette lister med navnet «uia-brukernavn_timeliste_complete.xls» for hver
deltager.
Vedlegg F – Forstudierapport
Forstudierapporten er vedlagt som et eget dokument ved navnet «Forstudierapport.pdf»
Om denne ikke er vedlagt for deg som leser, kan den også hentes elektronisk her:
http://d.uia.io/Forprosjekt_f.pdf
Vedlegg G – Pressemelding
En pressemelding tilhørende oppgaven.
Vedlegg H - Bidragsytelse
Deltagernes fordeling av oppgaver.
Side 50
HPR/D-2015/001 INFOTAINMENT-SYSTEM
Eksterne ressurser
Simple-Rss2-Android
En RSS 2.0 Parser for Android. Denne brukes i helper/NewsFetcher.java for å tyde RSS dataen
som blir brukt i forbindelse med nyhetsmodulen. Biblioteket er laget av Bruno Hautzenberger som
har gjort det tilgjengelig på GitHub under brukernavnet salendron.
Biblioteket og koden finnes her: https://github.com/salendron/Simple-Rss2-Android
Bootstrap
Bootstrap er brukt til designet tilhørende serveren (websiden). Bootstrap ble laget av en designer
for Twitter.com og er blitt et av de mest populære «open-source» front-end rammeverkene i verden.
Les mer om Boostrap, og se kildekoden her: http://getbootstrap.com/
Gson
Gson er et Java bibliotek som kan brukes til å konvertere Java-objekter til en JSON string, og
omvendt. I prosjektet er dette biblioteket brukt som en metode og lagre objekter lokalt på disk.
Gson er laget av Google og er frigitt under «Apache License, Version 2.0».
Biblioteket og koden finnes her: https://github.com/google/gson/blob/master/LICENSE
Side 51
HPR/D-2015/001 INFOTAINMENT-SYSTEM
Vedlegg
Vedlegg A
1 – SoC
2 – GitHub
3 – USB-otg
4 – GPU
5 – RSS
6 – JSON
7 – SHA-1
8 – Hash
9 – Checksum
Terminologi
En datamaskin som har alle funksjoner integrert på en
enkelt chip.
http://en.wikipedia.org/wiki/System_on_a_chip
GitHub er en webbasert GIT-repository tjeneste som
tilbyr mulighet for gratis lagring av åpen kildekode ved
bruk av GIT som verktøy.
http://en.wikipedia.org/wiki/GitHub
USB-otg som står for USB On-the-go er spesifikasjon
laget sent i 2011 som gir enheten som innehar porten
muligheten til å oppføre seg som en tjener. Dette gjør at
en kan koble til eksterne apparater som digitale
kameraer, tastatur med mer.
http://en.wikipedia.org/wiki/USB_On-The-Go
GPU er kort for «Graphics processing unit», på norsk
kjent som skjermkort. Dette er en elektronisk brikke som
utfører matematiske kalkulasjoner spesielt egnet for
tegning av bilder.
http://en.wikipedia.org/wiki/Graphics_processing_unit
RSS som er forkortelsen for «Really Simple
Syndication» er XML dialekt, basert på RDF. RSS
brukes mest til å videreformidle innhold fra en nettside.
http://no.wikipedia.org/wiki/RSS
JSON kort for «JavaScript Object notation» er en måte
å presentere data. JSON kan også sees på som et
alternativ til XML eller YAML. JSON er bygget opp av
«key, value pairs» der hvert navn har en verdi.
http://nettutvikler.com/ordbok/forklaring/json/
SHA «Secure Hash Algorithm» er en gruppe hashfunksjoner bestående av SHA-1, SHA-224, SHA-256,
SHA-384, og SHA-512. SHA-1 er forventet å ta over for
MD5, og er brukt i en rekke sikkerhetsapplikasjoner.
https://norsis.no/leksikon/secure-hash-algorithm/
Hash eller hashsum eller checksum er et lite utdrag fra
en blokk av digital data som er lagt inn for å sjekke for
feil. Checksum kan brukes til å verifisere at data ikke er
korrupt, eller for å sammenligne filer med samme navn.
http://en.wikipedia.org/wiki/Checksum
(Se 8-Hash)
Side 52
HPR/D-2015/001 INFOTAINMENT-SYSTEM
10 – CSS
11 – HTML
12 – PHP
13 – MySQL
14 – JavaScript
15 – C#
16 – ASP.NET
CSS eller «Cascade style sheets» er et språk som
brukes til å definere utseende på filer skrevet i HTML eller
XML. Prinsippet er at HTML eller XML dokumentet
utelukkende skal beskrive struktur og semantikk, mens
oppsett farger og annen stilinformasjon skal beskrives
ved hjelp av CSS.
http://no.wikipedia.org/wiki/Cascading_Style_Sheets
Et markeringsspråk for formatering av nettsider.
http://no.wikipedia.org/wiki/HTML
PHP er et dynamisk tolket og løst typet
programmeringsspråk hovedsakelig brukt for å utvikle
dynamiske nettsider.
http://no.wikipedia.org/wiki/PHP
MySQL er en GPL lisensiert
databaseadministrasjonssystem mye brukt i LAMP.
http://no.wikipedia.org/wiki/MySQL
JavaScript er en implementasjon av ECMAScriptet,
skriptsspråk best kjent for å tilføre dynamiske elementer
til nettsider.
http://no.wikipedia.org/wiki/JavaScript
C# eller (C Sharp) er et objektsorientert
programmeringsspråk utviklet av Microsoft som en del
av ASP.NET rammeverket.
http://no.wikipedia.org/wiki/C_Sharp
ASP.NET er en del av ASP-rammeverket utviklet av
Microsoft, ment primært brukt til å lage nettsider.
http://no.wikipedia.org/wiki/ASP.NET
17 – PHP-sessions
18 - Cookies
En PHP sesjon er en måte å lagre variabler mellom
sideskifter, hovedsaklig brukt når en bruker besøker et
nettsted. På denne måten kan en bruker ha en sesjon
kjørende så lenge denne er på nettstedet.
http://en.wikipedia.org/wiki/Session_(computer_science)
Engelsk: cookies. En liten tekst delt av nettsiden og
klienten. Informasjonskapsler brukes for å kjenne igjen
brukeren mellom hvert besøk på nettsiden. Et eksempel
er nettbutikker som «husker» hva du har lagt i
handlekurven.
https://norsis.no/leksikon/informasjonskapsel/
Side 53
HPR/D-2015/001 INFOTAINMENT-SYSTEM
19 - XSS
Cross-site Scripting (XSS) er en type sikkerhetshull der
angriperen setter inn fiendtlig programkode i websider
som kjøres når siden vises. Eksempler på slik kode er
HTML og Javascript. Typisk bruk av XSS er stjeling av
cookies og phishing. Cross-site scripting har også vært
omtalt som CSS, men har ofte blitt forvekslet med
Cascading Style Sheets og Content-Scrambling
System, og er derfor mindre brukt.
https://norsis.no/leksikon/cross-site-scripting/
20 - Brute Force
Metode for å knekke passord og krypteringsnøkkeler
ved å prøve et stort antall muligheter. For å finne en
pinkode på fire siffer må man i verste fall prøve alle
10.000 kombinasjonene.
https://norsis.no/leksikon/bruteforce/
21 - Salt & Hash
Salt brukes i kryptografiske hash-funksjoner for å
generere unike hash, salt er et tilfeldig nummer,
størrelse avhenger av implementasjonen. Input er ofte
salt og et passord i klartekst, dette kjøres gjennom en
hash-funksjon. I hash-verdien lagres salt i klartekst ved
siden av. Salt beskytter mot angrep som rainbow
crack fordi det vil være for mange verdier å utarbeide på
forhånd.
https://norsis.no/leksikon/salt/
Side 54
HPR/D-2015/001 INFOTAINMENT-SYSTEM
Vedlegg B Designutvikling
Vedlegg B 1: Første designutkast
Vedlegg B 2: Rutemodul-konsept
-- Side --
HPR/D-2015/001 INFOTAINMENT-SYSTEM
Vedlegg B 3: Kart og rutemodul endelig versjon
Vedlegg B 4: Kart, rutemodul og nyhetsmodul.
-- Side --
HPR/D-2015/001 INFOTAINMENT-SYSTEM
Vedlegg B 5: Kartmodul byttet ut med rutemodul
-- Side --
HPR/D-2015/001 INFOTAINMENT-SYSTEM
Vedlegg C Møtereferater
Møtereferat 13.01.2015
Det ble diskutert viktige fokuspunkter for tiden fremover, stikkord for spørsmål som må besvares er:
-
Hvilken del av prosjektet skal hovedfokus ligge på? (Kontrolldel /input eller grafisk del / 3dmodell)
Skal det være en server / klient løsning mellom styresystem og applikasjon?
o Fordel : Separat, styringssystem og modell (mindre feilkilder på kritisk infrastruktur)
Kan QT brukes også til 3D-modelering av kran-modell?
Skal det lages simulatorer når det kommer til sensor / styring, og skal disse eventuelt gå
gjennom «joystick» og «kran-sensor» modulene, eller feedes rett inn i programmet?
Hva skal det bygges mot? ARM, x86 eller annet? Dette fører til restriksjoner i bruk av verktøy.
Når kan utstyr skaffes, og eventuelt hva? (Joystick, Kran-modell, 3ds max modeller).
-- Side --
HPR/D-2015/001 INFOTAINMENT-SYSTEM
Møtereferat 27.01.2015
Det ble diskutert prognoseplan for kommende uke. Veileder kom med input på foreløpig arbeid på
forstudie-rapporten. Følgende ble foreslått:
-
Legge til informasjon om konkurrerende løsninger.
o Hva skiller vår løsning fra andre. (Pris, muligheter)
Diskutere videre rundt bruk av verktøy / Android Studio / Eclipse.
Begynne prototyping av funksjonalitet. (Vertica slice)
Vurdere prioriteringene bedre.
Skrive mer om mål (bruke Jira bedre, burndown charts osv)
Deltagere : Mikal Svendsen, Christian K Haraldseid, Christian Auby.
Møtereferat03.02.2015
Diskusjon vedrørende status på satte oppgaver, i løpet av uken ble det finpusset på rapport. Veileder
ønsker at gruppen skal fokusere på prototypen av løsningen, for å få nyttig erfaring ved bruk av
verktøyet og plattformen. Vi skal også fokusere på å hente inn informasjon vedrørende hvorfor
RedRock ønsker å utvikle produktet, samtidig som det ble etterspurt mer info om konkurrenter i
markedet. Sammenslåing av DAT215 i prosjektet ble også diskutert.
Deltagere : Mikal Svendsen, Christian K Haraldseid, Christian Auby.
Møtereferat10.02.2015
Det ble diskutert prognoseplan for kommende uke. Veileder kom med input på foreløpig arbeid på
forstudie-rapporten. Følgende ble foreslått:
-
Skrive mer om design-konsept etter hva vi har lært fra prototypen.
Skaffe informasjon om konkurrenter fra Red Rock.
Starte smått videre utvikling, for å sparke i gang selve utviklingen.
Skrive gruppekontakt.
Tilegne seg en fast arbeidsmetodikk for Jira, samt bli flinkere til å føre timer.
-- Side --
HPR/D-2015/001 INFOTAINMENT-SYSTEM
Møtereferat 17.02.2015
Det ble diskutert prognoseplan for kommende uke. Veileder pekte på viktigheten med å få unnagjort
et møte med RedRock for å avklare ting som
-
Andre løsninger i markedet.
Google Places API
Andre ting relatert til rapport.
Det er viktig å fokusere på å få ferdig rapporten innen fristen på om 3 uker. Rapporten skal også
sendes til veileder, slik at han kan se over den, mens det fremdeles er tid til å gjøre endringer.
Møtereferat 24.02.2015
Videre diskusjon angående forstudierapporten som snart skal leveres. Veileder ønsker spesifikke
spørsmål om rapporten, så han kan fokusere på det viktigste. Videre ble følgende tema om rapporten
diskutert :
-
State of the art kapittel, som omhandler lignende løsninger kontra vår.
Prototyping ideløsning, tiltenkt løsning i forprosjekt perioden.
Mer tekniske detaljer, oppbygging osv.
Noen sider litt tynne på tekst kontra bilder.
Ikke bruker termer før de er forklart.
Prioriteter bør merkes med kodeord, slik at en kan finne dem igjen.
Nevne litt mer om server-siden?
Deltagere : Christian Auby, Chrisitan Haraldseid og Mikal Svendsen.
-- Side --
HPR/D-2015/001 INFOTAINMENT-SYSTEM
Møtereferat12.05.2015
Prosjektdeltagerne er snart ferdig med produktet, noe bugs og småfeil og noen justeringer igjen.
Konsentrasjonen ligger i rapport. Møtet gikk mest ut på diskusjon rundt layout og konvensjoner
rundt rapportskriving. Noen av temaene som ble tatt opp er :
-
Holde teknologi beskrivelse av XML, XSS og mindre relevante teknologier i en separat liste og
henvise til denne.
Veileder synes inndeling kan fungere. Jobber litt videre med denne.
Red Rock skal nevnes som Red Rock A/S første gang, deretter Red Rock.
Veileder ønsker et utkast som han kan gå igjennom, helst med spesifikke spørsmål.
Deltagere : Christian Auby, Christian Haraldseid og Mikal Svendsen.
-- Side --
HPR/D-2015/001 INFOTAINMENT-SYSTEM
Vedlegg D Gannt
-- Side --
HPR/D-2015/001 INFOTAINMENT-SYSTEM
Vedlegg E Timelister
Christian K Haraldseid.
Issue
Key
IFS-54
IFS-54
IFS-54
Issue summary
Writing on final report
Writing on final report
Writing on final report
8
6
8
2015-5-24
2015-5-23
2015-5-23
IFS-54
IFS-54
IFS-54
IFS-54
Writing on final report
Writing on final report
Writing on final report
Writing on final report
8
10
8
5
2015-5-22
2015-5-20
2015-5-19
2015-5-18
IFS-54
IFS-54
IFS-61
Writing on final report
Writing on final report
General bugfixing and
polishing
Meetings and research
week 19
Meetings and reasearch week 18
Writing on final report
8
10
8
2015-5-18
2015-5-16
2015-5-14
4
2015-5-5
4
2015-4-28
10
2015-5-12
Writing on final report
Writing on final report
Writing on final report
Build dummy-data into
solution. (GPS)
Continue improving
the BusRoute-Module
Writing on final report
Writing on final report
Writing on final report
Writing on final report
4
5
5
7
2015-5-1
2015-5-4
2015-5-7
2015-4-30
Routemodule, formatting, reposistion of
example text, minor fixes, proofreading,
finishing server, writing chapter guide, formatting of changelog.
Intro, abstract, proof reading, meeting
Graphics
Structure, server, graphics
Adapt Route module to dummy
7
2015-4-15
Route objects rewrite
6
5
0,067
7
2015-5-11
2015-5-10
2015-5-8
2015-5-6
Adapt RouteModule
for LiveGPS data
Writing on final report
Mock Location Provider
Adapt web for custom
RSS and custom
routes.
2
2015-5-5
4
3
2015-5-5
2015-4-27
2
2015-4-23
IFS-38
Adapt RouteModule
for LiveGPS data
6
2015-4-23
IFS-44
IFS-42
IFS-39
IFS-42
IFS-42
IFS-42
Start writing report
News Module
Meetings week 12
News Module
News Module
News Module
5
2
1,5
3
5
5
2015-4-12
2015-3-24
2015-3-17
2015-3-22
2015-3-23
2015-3-20
IFS-60
IFS-59
IFS-54
IFS-54
IFS-54
IFS-54
IFS-27
IFS-30
IFS-54
IFS-54
IFS-54
IFS-54
IFS-38
IFS-54
IFS-48
IFS-49
Hours
Work date
Work Description
Finalizing for delivery
Edits, typos, formatting
Editing, finializing for last edit by external
helpers.
Editing
Proof-reading / Rewriting.
Proof reading, restructering, meeting.
Toast Module, Integrating Mikals modules.
Discussion, Conclusion, ToastModule
See changelog.
Fixing routemodule, internet dependencies, caching of routes, proximity
Meetings and discussion
Backend / Server + tools section. Testing
of Google GCM.
Marker, switch on event
Created program to create mock-routes
from Grimstad.
- Local routes in backend.
- RSS test function, for local rss.
-- Side --
- Demo purposed changes.
Fixed route module, working towards
functioning routes. Fixed several minor issues, added local route for testing purposes.
Pre report template, see v.01 changes.
Integrated with backend
HPR/D-2015/001 INFOTAINMENT-SYSTEM
IFS-40
1
2015-3-18
2
2015-3-9
Trying to read url from backend, (route).
2
2015-3-9
5
2015-3-8
Singelton, Sync, Interfaces and service to
class communication.
Implementing backend comp.
IFS-12
IFS-9
Meetings and research
week 12
Continue improving
the BusRoute-Module
Meetings and research
week 9
Continue improving
the BusRoute-Module
Work on pre-report.
Server side of things.
3
5
2015-3-1
2015-2-27
IFS-12
Work on pre-report.
6
2015-2-28
IFS-34
Start prototyping
backend / basic pages.
Start prototyping
backend / basic pages.
Start prototyping
backend / basic pages.
Continue pre-report
work.
Start prototyping
backend / basic pages.
Continue pre-report
work.
Continue improving
the BusRoute-Module
Meetings and research
week 8
Continue improving
the BusRoute-Module
Create backbone for
BusRoute - Module
Create the top-most
view with basic activity
functions
Create backbone for
BusRoute - Module
ToastModule
8
2015-2-26
6
2015-2-25
3
2015-2-24
2
2015-2-24
4
2015-2-24
2
2015-2-19
Div
2
2015-2-20
Improved listivew (stack, pop etc)
2
2015-2-23
RedRock meeting
4
2015-2-16
5
2015-2-14
3
2015-1-29
5
2015-2-15
4
2015-2-3
ToastModule
ToastModule
Work on pre-report.
Create backbone for
BusRoute - Module
Work on pre-report.
Work on pre-report.
Research
Research
Research
Start with prototyping
of fragment lifecycle
4
4
2
2
2015-2-5
2015-2-11
2015-1-26
2015-2-13
2
1
2
3
0,05
2
2015-2-2
2015-2-6
2015-2-9
2015-2-13
2015-2-13
2015-2-12
3
2015-2-12
2
2015-2-10
2
2015-1-21
IFS-30
IFS-33
IFS-30
IFS-34
IFS-34
IFS-19
IFS-34
IFS-19
IFS-30
IFS-29
IFS-30
IFS-22
IFS-13
IFS-22
IFS-24
IFS-24
IFS-24
IFS-12
IFS-22
IFS-12
IFS-12
IFS-20
IFS-20
IFS-20
IFS-15
IFS-22
IFS-15
IFS-12
Create backbone for
BusRoute - Module
Start with prototyping
of fragment lifecycle
Work on pre-report.
-- Side --
Progress meeting.
Proof-reading structuring.
Working impl of GCM server side and client side.
Techincal description formatting and suggestions based on Auby's comments.
Device page, config retrival and saving. +
GCM sender backend.
Database setup, gcm connection and registration process.
Database setup, gcm connection and registration process.
Added some info about state of the art,
and techincal design.
Fixed a V1-design for the BusRoute Module.
Design, responsiveness.
Working with intergration of the Google
Places API.
Basic strcuture, and overall design concept.
Worked with queuing and async tasking.
Fixed documentation, and queuing.
Intro, Goals, Solution
Fixed listview, and design.
Consept explanation
Div
ListViews and custom adapters
ndroid Studio
Fragment / Activity lifecycle
Documentation on the work done on the
toast module, also fixed some bugs. And
created a Word document describing the
module, combined with JavaDoc.
Experimenting with layouts, and listview
possibillities.
Trying to implement seamless interaction
between main activity and fragments.
Pre planning, system architecture, overall
design.
HPR/D-2015/001 INFOTAINMENT-SYSTEM
IFS-12
IFS-12
IFS-12
IFS-12
Work on pre-report.
Work on pre-report.
Work on pre-report.
Work on pre-report.
3
4
3
3
2015-2-8
2015-2-8
2015-2-4
2015-1-23
IFS-10
Overall planning state.
5
2015-1-23
TOTAL
Similare systems, architecture.
Product description, illustrations.
Gannt, Timeschedules, tasks.
Wrote Summary, Product design, Hardware..
Overall-designs, mocups drawing done,
and components.
302,6
Mikal Svendsen
Issue
Key
IFS-66
IFS-65
IFS-55
IFS-55
IFS-55
IFS-57
IFS-56
IFS-56
IFS-56
IFS-56
IFS-55
IFS-53
IFS-53
IFS-52
IFS-51
Issue summary
Hours
Work date
Work Description
Report - LocationService
Report - MapModule
Write report for playback system
Write report for playback system
Write report for playback system
2
2015-5-18
done
5
5
2015-5-16
2015-5-14
5
2015-5-13
done
Finished a first version of the module report, made flow chart
Wrote report
2
2015-5-12
Testing and bugfixing
week 20
MediaManger play
video on event
MediaManger play
video on event
MediaManger play
video on event
MediaManger play
video on event
Write report for playback system
Report - Sync system
Report - Sync system
Make MediaModule
and MediaManager
use pictures aswell
4
2015-5-12
5
2015-5-11
4
2015-5-9
2
2015-5-8
Finished playback on event, still need to
have it fetch playlist from backend
parsing
4
2015-5-7
prototyping
2
2015-5-6
writing report
1
5
5
2015-5-6
2015-5-5
2015-5-4
done
Wrote report
Research and testing
Map movement
smoothing
4
2015-5-1
it seems that the videoview we have been
using can not display photos, may have to
use a different playback option
Fixed latency issues
Change in report setup, covering several
internal components under broader module names
Proximity and video playback testing / fixing
done
IFS-51
Map movement
smoothing
6
2015-4-30
Calling this task finished now, there are
improvements to be done but we can not
prioritize them now
Implemented smooth movement
IFS-51
Map movement
smoothing
Map movement
smoothing
5
2015-4-29
working on latency fix
started from scratch on MapManager
5
2015-4-28
more prototyping
Map movement
smoothing
Broadcasting for Media and Sync system
5
2015-4-27
testing
Design and research
1
2015-4-24
IFS-51
IFS-51
IFS-47
-- Side --
Sync service responds to broadcasts from
DownloadManager
HPR/D-2015/001 INFOTAINMENT-SYSTEM
IFS-50
IFS-48
IFS-45
Debug LocationService
Mock Location Provider
LocationService
2
2015-4-24
fixed
0,5
2015-4-23
Done
6
2015-4-23
Wrapped up, quick testing
IFS-45
LocationService
2
2015-4-22
IFS-48
Mock Location Provider
3
2015-4-22
IFS-48
Mock Location Provider
6,5
2015-4-21
IFS-48
Mock Location Provider
LocationService
LocationService
Meetings week 16
Meetings week 16
LocationService
Meetings week 12
6
2015-4-20
5
3
2
1
8
3
2015-4-18
2015-4-16
2015-4-16
2015-4-14
2015-4-15
2015-4-9
IFS-43
MediaManager Service
8
2015-4-8
IFS-43
MediaManager Service
6
2015-4-7
IFS-43
MediaManager Service
3
2015-4-3
IFS-45
IFS-45
IFS-46
IFS-46
IFS-45
IFS-39
Needs some field testing but otherwise
complete
onLocationChanged callback from android would not fire, spent 2 hours debugging (I had to delete my emulator and create a new one)
Wrapped up, still need to make sure it
sorts location objects properly leaving the
last 30 minutes for that
Testing and fixing parsing
A lot of debugging
MockProvider class more or less ready,
started working on xml parser soon done
callback and broadcasting
research, programming
Meeting with red rock
Meeting with Auby
Design, prototyping
Researching broadcast receivers, planning ahead
Wrapped up, tested, fixed, etc.
Done
Created functionality to create playlists
based on set duration, need one more
day to finish the public playback method
Restructured (removed) threading code
Made some design changes, new interfaces, deleted some
IFS-43
MediaManager Service
5
2015-4-2
Started on playback implementation
Added errorhandling
some structure changes
start on public methods
spawns background thread properly
IFS-43
MediaManager Service
6
2015-4-1
bugfixes / debugging
Working with threading
A lot of time spent on research and testing
IFS-43
MediaManager Service
4
2015-3-31
Will probably need more time but it is
soon usable
Created service
Prototyping
Reading android documentation
-- Side --
HPR/D-2015/001 INFOTAINMENT-SYSTEM
IFS-41
Advertise module
1
2015-3-31
Added some interface and helper classes
for threading
Troubleshooting
IFS-41
IFS-39
IFS-41
Advertise module
Meetings week 12
Advertise module
3
2
5
2015-3-30
2015-3-30
2015-3-25
Added background thread
Ad module plays videos
setup new computer with tools and project
Prototyping
Debugging and fixing merge related errors
Meeting
Exception handling
IFS-39
IFS-37
IFS-39
IFS-41
IFS-37
IFS-41
IFS-39
IFS-37
Meetings week 12
Fix, small errors and
bugs in SyncAdapter
Meetings week 12
Advertise module
Fix, small errors and
bugs in SyncAdapter
Advertise module
1
3
2015-3-24
2015-3-24
1
3
4
2015-3-23
2015-3-23
2015-3-23
5
2015-3-19
Merging and conflic resolving
research, prototyping
Trying to fix app crashing on connection
refused
research and prototyping
Meetings week 12
Fix, small errors and
bugs in SyncAdapter
1
3
2015-3-18
2015-3-18
Weekly meeting with Halvard and Auby
testing with large amount of files
error fixing
IFS-31
Design and implement
SyncAdapter
3
2015-3-17
IFS-31
Design and implement
SyncAdapter
Design and implement
SyncAdapter
5
2015-3-16
5
2015-3-13
IFS-31
IFS-31
IFS-31
Design and implement
SyncAdapter
Design and implement
SyncAdapter
7
5
Fixed a few bugs
Testing
Functionality completed, need to handle
errors and clean up code
SyncService now starts download
properly, stores to SD card, started working on logic to deal with finished downloads and failed downloads
2015-3-12
Have to extend estimate even further,
main functionality will be done soon but
need alteast a full day to clean up code
and handle errors properly
Backend and client
2015-3-11
Client is now able to determine what files
to download and queue them, will not
download duplicates
JSON parsing
Lot of research
IFS-31
Design and implement
SyncAdapter
8
-- Side --
2015-3-10
Client now receives JSON from server,
and checks its own content
I have deemed Android's sync adapter
framework useless for our application,
poorly documented and impossible to debug. Discarding all current work, and
starting over with our own framework for
sync. This means more time.
HPR/D-2015/001 INFOTAINMENT-SYSTEM
IFS-31
Design and implement
SyncAdapter
7
2015-3-9
IFS-31
Design and implement
SyncAdapter
8
2015-3-7
Working on syncadapter implementation.
Will take longer than initially estimated.
Extending remaning estimate to 2 days
learning php
IFS-35
Design and implement
mediaplayer module
Design and implement
mediaplayer module
Design and implement
SyncAdapter
Create the Live-view
map fragment.
3
2015-3-5
prototyping sync adapter backend
more prototyping
5
2015-3-4
Research, prototyping
5
2015-3-5
Research and sketching
2
2015-2-27
IFS-35
IFS-31
IFS-25
Trying to solve authentication problem
Added moving marker and camera to map
fragment
fixing some bugs
IFS-29
IFS-32
IFS-25
IFS-25
Meetings and research
week 8
RouteHandler
Create the Live-view
map fragment.
Create the Live-view
map fragment.
1
2015-2-27
3,5
2015-2-26
5
5
2015-2-26
2015-2-25
can not test anything right now
Cleaning my office
Created singleton class, with subscribe
and notify system
Should be able to receive location updates from local gps unit now
Debugging map and asynctask, skipping
smooth movement for now
Moved all relevant prototyping code to the
project repository, map now works except
for auth issues with google.
Moving prototype over to the actual project
implemented location queue system with
delay
IFS-25
IFS-33
Create the Live-view
map fragment.
Meetings and research
week 9
7
2015-2-24
1
2015-2-24
Changed the remaining estimate, this will
require a lot more work than previously
estimated
Designed smooth movement function.
Todo: implement it, implement route trail
Working on getting git project to work
creating sprint
IFS-29
IFS-25
IFS-25
Meetings and research
week 8
Create the Live-view
map fragment.
1
2015-2-17
2
2015-2-19
Create the Live-view
map fragment.
4
2015-2-18
-- Side --
etc
Meeting with auby, then with Kråkevik
Experimenting with movement interpolation for smooth movement on lower location update frequencies
Debugging and solved maptype.NORMAL
crashing emulator (it just doesnt work on
HPR/D-2015/001 INFOTAINMENT-SYSTEM
emulator, solution: dont use it)
IFS-23
IFS-25
Prototyping map module
8
2015-2-17
IFS-20
IFS-20
Research
5
2015-2-12
Android location API and examples
IFS-15
Start with prototyping
of fragment lifecycle
Meetings and discussion week 7
Research
Research
2
2015-2-10
Testing fragments
1
2015-2-10
Weekly meeting with Auby
5
4
2015-2-10
2015-2-8
lynda.com video on fragments
Setting up work environment
IFS-23
IFS-21
IFS-20
IFS-20
2015-2-16
1
2015-2-13
6
2015-2-13
4
2015-2-9
A lot of testing, so far map only works
properly in satellite mode and crashes in
all other modes after a certain zoom level,
need to debug this more
Still experimenting with android lifecycles
etc.
video tutorial about maps API
Create the Live-view
map fragment.
Prototyping map module
Prototyping map module
Research
IFS-23
4,5
Working on design for smooth scrolling
map
Added more functionality, marker that
moves with onlocationchanged and camera
Figuring out google maps API and access. Map now working in app
Watching lynda.com android developing
tutorial
(installing tools etc)
TOTAL
322
-- Side --
HPR/D-2015/001 INFOTAINMENT-SYSTEM
Vedlegg E Pressemelding
Det er utviklet en Infortainment prototype som demonstrerer et infotainment-system til bruk I
transportsektoren kjørende på lavkostnads-enheter. Dette gjør det mulig å selge billigere systemer
for kundegrupper som ønsker et større antall enheter i sin flåte av kjøretøy. Et infotainment system
kan også åpne opp for mange nye muligheter da kjøretøyet er koblet opp mot internett. En kan da
tenke seg statistikk med mye annet. Produktet er et resultat av en bacheloroppgave utlyst av Red
Rock A/S.
-- Side --
HPR/D-2015/001 INFOTAINMENT-SYSTEM
Vedlegg E Bidragsytere
Som nevnt i rapporten er bidragsyterne Christian K Haraldseid og Mikal Svendsen. Oppgavene er
gjennom hele perioden fordelt rettferdig mellom deltagerne og arbeidsmengden / timelistene
reflekterer dette. Under prosjektet føler deltagerne at oppgavemengden og arbeid mellom deltagere
tilfredsstiller målsetningen om en rettferdig fordeling. Noen nøkkelfordelinger i arbeidet:
Mikal Svendsen
- Kartmodul
- Reklamemodul
- LocationManager
- Syncservice
- Git-ansvar
Christian K Haraldseid
- Rutemodul
- Nyhetsmodul
- Backend
- Jiira Ansvar
-- Side --