Autópálya információk SMS-ben

Biztos sokak által ismert, hogy az autópályákkal kapcsolatos aktuális információk SMS-ben is lekérdezhetőek. Én nem vagyok SMS rajongó, főként vezetés közben nem, ezért inkább készítettem egy Windows Mobile alkalmazást.

A protokoll nagyon egyszerű, SMS-t kell küldeni a +36 70 7774636 számra M0, M1, M3 vagy M7 tartalommal és általában 2 SMS-ben jön a válasz (valamikor később). Windows Mobile 5-től kezdve .NET Compact Framework segítségével könnyen megy az SMS küldés: a Microsoft.WindowsMobile.PocketOutlook névtérben lévő SmsMessage osztályt jól kitalálták:

    SmsMessage message = new SmsMessage();
    message.To.Add( new Recipient( this.txtPhoneNumber.Text ) );
    message.Body = speedwayName;
    message.RequestDeliveryReport = this.chkReceipt.Checked;
    message.Send();        

A felhasználói felület megalkotása mindig kényes egy mobil alkalmazás esetén, így elgondolkodtam azon, hogy hogyan akarom a válasz SMS-eket megjeleníteni. A Microsoft.WindowsMobile.PocketOutlook.MessageInterceptor osztály lehetőséget ad arra, hogy az alkalmazásom értesítést kapjon, ha beérkezik egy üzenet, de így az olvasást biztosító felhasználói felület megvalósítása az én feladatom maradna. Az alapértelmezett buborékos megjelenítéshez használt rendszerfont mérete szerencsére elég nagy ahhoz, hogy még vezetés közben is el tudjam olvasni. Ráadásul így bezárhatom az alkalmazást, visszatérhetek a GPS-hez, ami praktikus, hiszen a válaszok sokszor percekkel később jönnek.

A másik felhasználói felülettel kapcsolatos kérdés az volt, hogy hogyan akarom a kérést elküldeni. Egy desktop alkalmazásnál nem probléma, combo boxból kiválasztom, hogy melyik autópálya érdekel és egy gombra kattintva indul is az SMS. Vezetés közben viszont kizárt, hogy ezt meg tudjam tenni, így a bazi nagy gombos megvalósítást követtem, így nem kell stylus, elég az ujjam, bármilyen nagy is. Némi Mio-szerű fekete dizájnnal megspékelve ilyen lett a főablak:

SpeedwayInfo Main ablak

Mivel a telefonszám nem sűrűn változik, ezért a gyors megoldást választottam, bedrótoztam az alkalmazásba.

Probléma volt, hogy a sikeres vagy sikertelen SMS küldésről hogyan adok visszajelzést a felhasználónak (magamnak). Úgy döntöttem, hogy a hang a legkézenfekvőbb megoldás, mert ez vonja el legkevésbé a figyelmemet a vezetésről. Kerestem két WAV fájlt és erőforrásként beágyaztam a szerelvénybe, a tartalmukat pedig a Assembly.GetExecutingAssembly().GetManifestResourceStream( "SpeedwayInfo.Sounds.Ok.wav" ) metódus meghívásával kérdezem le. A stream lejátszásához nem találtam felügyelt osztályt, így kellett egy kis P/Invoke:

    [DllImport( "CoreDll.DLL", EntryPoint = "PlaySound", SetLastError = true )]
    private extern static int WCE_PlaySound( string szSound, IntPtr hMod, int flags );

    [DllImport( "CoreDll.DLL", EntryPoint = "PlaySound", SetLastError = true )]
    private extern static int WCE_PlaySoundBytes( byte[] szSound, IntPtr hMod, int flags );

Miután sikerült a streamet byte tömbbé alakítani, a lejátszás már csak egy sor:

    Sound.WCE_PlaySoundBytes( this._soundBytes, IntPtr.Zero, (int) ( Flags.SND_ASYNC | Flags.SND_MEMORY ) );

Íme néhány tanulság:

  • Mobil alkalmazás esetén a felhasználói felület kialakítása mindig kritikus. Desktop alkalmazásnál is, de itt még inkább.
  • A felhasználói felület kitalálása és megfelelő kialakítása gyakran több időt visz el, mint a kódolás.
  • Nem csak egér van a világon 🙂
  • A PocketOutlook névtér nagyon jól használható.
  • Compact Frameworkön is van P/Invoke, nem kell megijedni tőle.

Ha valakit érdekel, az alkalmazás letölthető, legalább Windows Mobile 5.0 és Compact Framework 3.5 kell neki.

Reklámok

2 thoughts on “Autópálya információk SMS-ben

  1. Visszajelzés: Egy nap Windows Phone fejlesztőként: Autópálya információk SMS-ben « Balássy György szakmai blogja

  2. Visszajelzés: Egy nap Windows Phone fejlesztőként: Autópálya információk SMS-ben - Balássy György szakmai blogja - devPortal

Vélemény, hozzászólás?

Adatok megadása vagy bejelentkezés valamelyik ikonnal:

WordPress.com Logo

Hozzászólhat a WordPress.com felhasználói fiók használatával. Kilépés / Módosítás )

Twitter kép

Hozzászólhat a Twitter felhasználói fiók használatával. Kilépés / Módosítás )

Facebook kép

Hozzászólhat a Facebook felhasználói fiók használatával. Kilépés / Módosítás )

Google+ kép

Hozzászólhat a Google+ felhasználói fiók használatával. Kilépés / Módosítás )

Kapcsolódás: %s