SMS - Produktion

App Inventor

Google har udviklet et udviklingsmiljø kaldet App Inventor til at lave apps til Android telefoner, dvs. smart phones, der kører med styresystemet Android. Programmer til smart phones kaldes typisk for apps - sandsynligvis fordi det er en god og smart forkortelse for det engelske ord "applications".

App Inventor giver mulighed for at udvikle Apps til Android telefoner ved at bruge en web browser og en telefon eller en emulering af en telefon på en computer, dvs. et program, der kan have næsten samme rolle som vores telefon. Telefonemulatoren har dog ikke noget SIM-kort og kan derfor ikke foretage opkald eller sende SMS beskeder.

Noget af det smarte ved App Inventor er, at Google gemmer arbejdet på deres egne servere, så de apps, du laver, er altid tilgængelig under din Google konto i App Inventor uanset hvilken computer, du benytter.

App Inventor består af to grundlæggende dele:

  • App Inventor Designer: Giver mulighed for at vælge komponenter til app’en
  • App Inventor Blocks Editor: Giver mulighed for at vælge funktionalitet for de enkelte komponenter

Følgende figur viser en oversigt over, hvordan App Inventor hænger sammen:

app-inventor-overblik.png

Din app kommer frem på telefonen samtidig med, at du tilføjer nye komponenter i App Inventor Designer, så du har mulighed for at teste dit arbejde, mens du udvikler. Når du er færdig kan du pakke app'en til en selvstændig applikation, der kan installeres på andre telefoner.

Hvis du ikke har en Android telefon, så kan du udvikle apps ved at bruge Android emulatoren.

App Inventor udviklingsmiljøet kan køre på Mac OS X, GNU/Linux og Windows samt flere populære Android telefoner. Applikationer lavet med App Inventor kan installeres på alle Android telefoner.

Før du kan bruge App Inventor er du nødt til at gøre følgende:

Step 1: Sæt din computer op.

Step 2: Gør en af følgende afhængig af, om du vil udvikle på en Android telefon eller med emulatoren:

Din første app

De to links i slutningen af forrige afsnit viser hen til en detaljeret tutorial til at lave din første app kaldet HelloPurr på Googles hjemmeside. Her gennemgår vi i korte træk, hvordan HelloPurr app'en bliver til i App Inventor.

HelloPurr er en app med en kat, der siger miav, når brugeren trykker på billedet af katten.

Udseendet af app'en opbygges i App Inventor Designer. Først trækkes Button (knap) komponenten i Basic kategorien ind på skærmen i midten.

hellopurr1.png

Komponenterne er vist til højre for skærmen under Components, hvor knappen er vist som Button1. Helt ude til højre kan egenskaberne for knappen ændres.

Knappen skal ikke have et navn (Text egenskaben), men i stedet sættes til at vise billedet "kitty.png" under Image egenskaben. Der trækkes en Label (label - Label1) fra Basic kategorien og en Sound (lyd - Sound1) fra Media kategorien ind på skærmen. Bemærk, at Sound1 kommer til at fremgå under overskriften "Non-visible components" (ikke-synlige komponenter), da man ikke kan se lyden på mobilens skærm.

hellopurr2.png

Vi giver Label1 indholdet "Pet the Kitty" ved at sætte Text egenskaben. Desuden sætter vi FontSize (skriftstørrelse) til 30, BackGroundColor (baggrundsfarve) til blå og TextColor (tekstfarve) til gul.

Desuden sætter vi Source (kilde) på Sound1 til "meow.mp3".

Vi skal nu have vores knap med billedet af katten til at sige miav, når brugeren trykker på knappen. Dette gøres i Blocks Editoren, der åbnes via knappen "Open the Blocks Editor" øverst til højre i Designeren. Blocks Editoren er vist herunder, hvor My Blocks fanen og Button1 er valgt. Under My Blocks er de komponenter (Button1, Label1, Screen1 og Sound1), der blev valgt til app'en i Designeren. Når Button1 er valgt, så vises den mulige opførsel af knappen, som kan defineres i Blocks Editoren.

hellopurr3.png

Vi vil gerne have, at der skal ske en handling, når brugeren trykker på knappen, så vi trækker when Button1.Click do strukturen ind i editoren. Der er nu plads i det tomme hul i denne struktur til at vælge, hvilken handling, der skal aktiveres, når der bliver trykket på knappen. Vi vælger derfor Sound1 komponenten for at finde den handling, der skal udføres:

hellopurr4.png

Vi trækker derefter call Sound1.Play strukturen ind i det tomme hul i when Button1.Click do strukturen:

hellopurr5.png

Vi har nu fået defineret den funktionalitet, som vores app skal have.

Vi overfører her vores app til emulatoren, så vælg New emulator i Blocks Editoren, og der kommer en mobilemulator op på skærmen. Vælg derefter Connect to Device… i Blocks Editoren og vælg emulatoren i listen. Din HelloPurr app skulle derefter komme frem i emulatoren:

hellopurr7.png
hellopurr6.png

Tryk på katten og den skulle gerne sige miav! :-)

Flere apps

Det er nok en god idé at lege med lidt flere apps inden du kaster dig over apps til SMS beskeder, men hvis du føler dig klar, så kan du vælge at gå direkte videre. En app, der giver mulighed for at lege lidt mere med App Inventor, er Googles PicCall app, der kan bruges til at foretage opkald til dine venner.

SMS beskeder

Vi vil nu bruge App Inventor til at lege med apps til at sende og modtage SMS beskeder. Vi vil igen i korte træk vise, hvordan disse apps kan laves i App Inventor. En detaljeret gennemgang er givet i Kristian Langborg-Hansen: Android Apps - uden programmering[1], Kapitel 5: SMS-beskeder.

Automatisk svar på en SMS

Først vil vi lave en app, der kan bruges, når du er til møde eller af anden grund ikke vil forstyrres. Når app'en er aktiveret, så sender programmet automatisk en SMS tilbage til afsenderen, så vedkommende ved, at du er forhindret i at svare. Vi laver også en undtagelse i programmet, så hvis du modtager en SMS besked fra en bestemt afsender, som gerne må forstyrre dig, så afspilles en særlig lyd.

Lav en ny app kaldet for SMSsender. I Designeren trækkes Texting komponenten fra Social kategorien ind på skærmen. Det er en ikke-synlig komponent, der bruges til at sende og modtage SMS beskeder.

I Blocks Editoren vælger vi Texting1 komponenten. Her skal vi bruge strukturen when Texting1.MessageReceived do til at foretage en handling, når vi modtager en besked. Vi trækker derfor denne struktur ind i Editoren. Vi ser, at vi i denne struktur modtager de to parametre number (telefonnummeret på afsenderen) og messageText (beskedteksten):

smssender1.png

Vi skal nu bruge number parameteren og vores Texting komponent til at sende et svar tilbage til modtageren. Blocks Editoren indeholder nu følgende komponenter:

smssender2.png

Værdien af telefonnummeret (value number), der skal gives til set Texting1.PhoneNumber to findes under My Definitions. Teksten til set Texting1.Message to oprettes ved at klikke i Editoren og vælge Text -> text.

Automatisk svar med undtagelse

Vi vil lave en undtagelse til vores automatiske svarbesked, så en besked fra et bestemt telefonnummer afspiller en lyd i stedet for at sende svarbeskeden. Vi tilføjer derfor en lyd i Designeren, som vi kalder for Fanfare.

For bedre at kunne overskue vores program starter vi med at definere en funktion kaldet sendBesked, der udfører de tre trin fra vores when Texting1.MessageReceived do struktur. Dette gøres ved at bruge to procedure do strukturen under Definitions i Built-In fanen:

smssender3.png

Vi kalder funktionen for sendBesked i stedet for procedure. De tre blokke fra when Texting1.MessageReceived do strukturen flyttes nu hen under sendBesked funktionen. Under My Definitions i My Blocks fanen ligger nu call sendBesked strukturen, som trækkes ind i when Texting1.MessageReceived do strukturen:

smssender4.png

Vi mangler nu blot at definere parameteren afsender i sendBesked funktionen, der oprettes ved at klikke i Editoren og vælge Define-> name og kalde denne for afsender. Blokken name afsender trækkes hen til sendBesked arg hullet. Der skal nu indsættes value number i call sendBesked afsender og value afsender i set Texting1.PhoneNumber to:

smssender5.png

Vi har nu fået gjort vores kode mere overskuelig til de ændringer, vi vil lave for at lave en undtagelse til vores automatiske svarbesked.

Vi vil undersøge vores telefonnummer og spille Fanfare lyden, hvis det er et bestemt nummer, ellers vil vi sende vores automatiske svarbesked. Dette gøres med kontrolstrukturen ifelse under Control i Built-In fanen.

Vores program skulle gerne ende med at se ud som følger:

smssender6.png

Hvis værdien af telefonnummeret (value number) er 45454545, så afspilles lyden (Fanfare.Play), ellers kaldes funktionen sendBesked, der sender vores automatiske svarbesked.

SMS med timer

Vi vil nu lave en app, der kan sende en besked med tidsforsinkelse. Dette kan løse det problem, der nogengange opstår, når du sent om aftenen kommer i tanke om, at du gerne vil sende en besked til din kollega, men du vil ikke sende den på det tidspunkt, da du regner med, at hun er gået i seng. Du sætter derfor en timer på din besked, så den først bliver sendt næste morgen.

Komponenterne i Designeren ser ud som vist i følgende figur:

smstimer1.png

Det er muligt at have flere komponenter i samme vandrette område ved at bruge HorizontalArrangement komponenten under Screen Arrangement kategorien. Vælg knappen er i virkeligheden en PhoneNumberPicker, der findes under Social kategorien. Når brugeren klikker på knappen, så viser telefonen helt automatisk oversigten over kontakter lagret på telefonen, så brugeren kan vælge en modtager af beskeden.

Bemærk, at vi også har valgt de ikke-synlige komponenter Texting og Clock, som skal bruges til hhv. at sende SMS beskeder og sætte vores timer. Egenskaben TimerEnabledClock komponenten skal slås fra, da vi først aktiverer timeren, når brugeren trykker på Send knappen.

Vi laver som sædvanlig funktionaliteten i Blocks Editoren:

smstimer2.png

Det er indholdet af tekstfelterne Timer og Minutter, der bestemmer, hvornår SMS'en skal afsendes. Tidsintervallet til timeren skal omregnes til millisekunder. Det gør vi ved først at omregne antallet af timer til minutter ved at gange med 60, lægge minutterne til og dernæst gange med 60.000 for at komme fra minutter til millisekunder. Det kommer desværre til at se lidt kompliceret ud i Editoren.

Når vi har sat intervallet, skal timeren aktiveres. Dette gøres ved at sætte TimerEnabled egenskaben til true.

Når intervallet er sat, og timeren er aktiveret, vil programmet vente, indtil den angivne tid er gået. Når tiden er gået, kaldes blokken when Clock.Timer do, så det er i denne blok, vi må definere, hvordan beskeden skal sendes. Først sætter vi TimerEnabled egenskaben på Clock til false, da timeren kun skal aktiveres én gang. Vi sætter derefter PhoneNumber og Message egenskaberne på Texting komponenten, så vi kan afslutte med at sende beskeden.

Blokken when Adressebog.AfterPicking do sørger for, at modtagerens telefonnummer bliver sat på Modtager feltets Text egenskab.

SMS til grupper af personer

Tag udgangspunkt i Googles Text Group app:

  • Gennemgå først den viste tutorial og lav Text Group app'en.
  • Lav din egen videreudvikling af Text Group app'en, hvor det er muligt at vælge telefonnumre ud fra kontakterne gemt på telefonen til gruppe SMS'en.

Broadcaster Hub

Tag udgangspunkt i Googles Broadcaster Hub app:

  • Gennemgå først den viste tutorial og lav Broadcaster Hub app'en.
  • Når du har fået Broadcaster Hub app'en til at virke så arbejd videre med følgende:
    1. Giv mulighed for at klienternes telefoner kan slette sig selv fra listen ved at sende beskeden "quitabc" til app'en.
    2. Lad hub administratoren (brugeren af din app) tilføje og fjerne telefonnumre fra broadcast listen.
    3. Lad hub administratoren angive telefonnumre, der ikke tillades i listen.
Referencer
1. Kristian Langborg-Hansen: Android Apps - uden programmering; Libris, 2011
Medmindre andet er angivet, er indholdet af denne side licenseret under Creative Commons Attribution-NonCommercial 3.0 License