Vývoj pro mobilní platformy s C# (třetí část)

Jan Pospíšil 2. 5. 2013

V posledním dílu našeho třídílného seriálu o multiplatformním vývoji pro mobilní platformy bych rád ukázal jednoduchou praktickou ukázku vývoje aplikace pro Android a nakonec Windows Phone. Popis aplikace pro Windows Phone bude jednodušší, jelikož není až tak zajímavá z pohledu Windows Phone vývojáře.

Hello World pro MonoDroid

Nyní vytvoříme stejnou aplikaci i pro android s použitím Mono for Android, zkráceně MonoDroid. Aplikace s MonoDroid můžeme vyvíjet pod více operačními systémy: MS Windows, Linux, Mac OS. K vývoji je třeba mít naistalováno:

  • Java JDK

  • Android SDK

  • MonoDevelop nebo Visual Studio 2010 (všechny verze kromě Express)

  • MonoDroid

MonoDroid je implementací Android API, které je napsána v Javě. Monodroid obsahuje všechny knihovny z BCL (Base Class Library). Linker byl upraven, stejně jako v MonoTouch, tak, aby do spustitelného kódu byly přilinkovány jen ty knihovny, které jsou potřeba pro běh aplikace. Jak Java, tak C# používá JIT (Just In Time) kompilátor, takže nebylo třeba řešit obdobné problémy jako v MonoTouch.

Typické Android aplikace běží v Dalviku. Dalvik je Java Virtual Machine, který je optimalizován pro běh na mobilních zařízeních. Jádro MonoDroid, ve kterém běží aplikace napsané v MonoDroid, je posazená na stejné úrovni jako virtuální stroj Dalvik, viz obrázek 5.



MonoDroid garbage kolektor je také optimalizován, aby lépe vyhovoval omezením mobilního zařízení. Mimoto byla každému objektu přidána funkce Dispose, tak jako v C#, protože Java takovou funkci nemá. Java pro nastavování publikovaných proměnných používá funkce get a set. Tyto přístupové mechanismy byly nahrazeny vlastnostmi (properties), stejně jako v C#.

Android API pro zpracování událostí používá tzv. listenery. Bohužel tuto vlastnost se nepodařilo převést do vlastností C#. Proto se k implementaci této vlastnosti používají dvě programové konstrukce, viz příklad 5.

void setupHandlers(string message)
{
    // Method 1: use a lambda expression
    button.Click += (sender, args) =>
    {
        // handle click event
    };
    // Method 2: assign a method to handle the event
    button.Click += handleClickEvent;
}
void handleClickEvent(object sender, EventArgs args)
{
    // handle click event
}

Můžeme se pustit do vytvoření první aplikace pomocí MonoDroid, která bude mít stejné funkce jako v předchozím případě. Při programování našeho příkladu použijeme Visual Studio 2010 běžící pod



operačním systémem Microsoft Windows. Vytvoříme nový projekt, viz obrázek 6. V projektu se automaticky vytvoří implicitní složky klasického Android projektu, viz obrázek 7:

  • Assets – tento adresář se používá k ukládání zdrojů v „surovém“ stavu, jako např. fonty

  • Resources – adresář se taky používá k ukládání zdrojů, jako jsou obrázky, video, audio, lokalizační soubory nebo definice zobrazení obrazovek. Při kompilaci se vytvoří soubor Resource.Designer.cs, ve kterém je každému zdroji přidělena celočíselná konstanta, přes kterou se na ně přistupuje. Tento adresář obsahuje ještě další tři podadresáře:

    • Drawable – obsahuje jen obrázky

    • Layout – zde xml soubory obsahující návrhy grafického rozhraní

    • Values – obsahuje xml soubory s řetězci, lokalizacemi a styly.

  • Activity1.cs – je výkonný kód aplikace.







Do nového projektu přidáme First.axml a Second.axml, viz příklad 6 a příklad 7, soubor s návrhem grafického rozhraní. Každý grafický element musí mít danou výšku a šířku nebo daný parametr vyplnění, např. fill_parent, wrap_content.

Příklad 6 obsahuje pouze jedno tlačítko roztažené až k okrajům a vysoké jen tak, aby se tam vešel popisek. Element LinearLayout zajistí umísťování prvků odshora dolů. Příklad 7 obsahuje jen dvě textová pole pod sebou.

Základní stavební kameny v aplikacích Android jsou komponenty:

  • Activity – odpovídá jedné obrazovce, obsluhuje prvky grafického rozhraní a interakce s uživatelem. Aplikace obsahuje obvykle více aktivit, mezi kterými uživatel přepíná a aktivity si mezi sebou předávají data.

  • Service – neposkytuje uživatelské rozhraní, ale představuje proces běžící na pozadí.

  • Content providers – poskytuje přístup k datům, jeho rozhraní obsahuje metody: insert, update, delete a query.

  • Broadcast receiver – reagující na příchozí oznámení. Např. oznámení o nízkém stavu baterie, zachycení fotografie nebo doručení SMS.

Nyní vytvoříme aktivity pro obrazovky FirstActivity.cs, viz příklad 8, a SecondActivity.cs, viz příklad 9.

using System;
using Android.App;
using Android.Content;
using Android.OS;
using Android.Widget;
namespace MonoAndroidApp2
{
    [Activity(Label = "Hello, Android!", MainLauncher = true, Icon = "@drawable/icon")]
    public class FirstActivity : Activity
    {
        protected override void OnCreate(Bundle bundle)
        {
            base.OnCreate(bundle);
            SetContentView(Resource.Layout.First);
            var button = FindViewById
using Android.App;
using Android.OS;
using Android.Widget;
namespace MonoAndroidApp2
{
    [Activity(Label = "Second Activity")]
    public class SecondActivity : Activity
    {
        protected override void OnCreate(Bundle savedInstanceState)
        {
            base.OnCreate(savedInstanceState);
            SetContentView(Resource.Layout.Second);
            var text = FindViewById(Resource.Id.Text);
            text.Text = Intent.GetStringExtra("text");
        }
    }
}

V obou aktivitách je přepsána metoda OnCreate, která je součástí životního cyklu aktivity. Tato metoda se spustí ihned po spuštění aktivity. Funkce SetContentView nahraje definici grafického rozhraní obrazovky. Funkce buttonClicked, která je událost tisku tlačítka, spustí SecondActivity. Aplikaci stačí nyní pouze přeložit a spustit, viz obrázek 8.



Vývoj pro Windows Phone

Pro vývoj aplikací pro Windows Phone 7.5 potřebujeme pouze Visual Studio 2010 (nebo 2012) a Windows Phone SDK. Jsou dvě možné cesty, jakým způsobem vyvíjet aplikace pro Windows Phone:

widgety

  • Silverlight – používá se pro aplikace, které nemají složité grafické rozhraní nebo 3D scény. Pomocí Silverlight je naprogramována většina aplikací.

  • XNA – většinou se používá pro vývoj her na mobilní zařízení Windows Phone nebo Zune.

Podrobněji se vývojem pro Windows Phone nebudeme zabývat, protože vývoj je zcela standardní. Pro úplnost ještě, ukázku aplikace vidíme na obrázku 9.



Zdroje

Našli jste v článku chybu?
Podnikatel.cz: Udělali jsme velkou chybu, napsal Čupr

Udělali jsme velkou chybu, napsal Čupr

Lupa.cz: Blíží se konec Wi-Fi sítí bez hesla?

Blíží se konec Wi-Fi sítí bez hesla?

Vitalia.cz: Tesco nabízí desítky tun jídla zdarma

Tesco nabízí desítky tun jídla zdarma

Vitalia.cz: Vím, co se učíš, ale netuším, co piješ

Vím, co se učíš, ale netuším, co piješ

Lupa.cz: Jak levné procesory změnily svět?

Jak levné procesory změnily svět?

Vitalia.cz: Voda z Vltavy před a po úpravě na pitnou

Voda z Vltavy před a po úpravě na pitnou

Lupa.cz: Další Češi si nechali vložit do těla čip

Další Češi si nechali vložit do těla čip

Vitalia.cz: 5 chyb, které děláme při skladování potravin

5 chyb, které děláme při skladování potravin

DigiZone.cz: Parlamentní listy: kde končí PR...

Parlamentní listy: kde končí PR...

Vitalia.cz: Jsou vegani a vyrábějí nemléko

Jsou vegani a vyrábějí nemléko

Vitalia.cz: dTest odhalil ten nejlepší kečup

dTest odhalil ten nejlepší kečup

DigiZone.cz: Technisat připravuje trojici DAB

Technisat připravuje trojici DAB

Podnikatel.cz: Byla finanční manažerka, teď cvičí jógu

Byla finanční manažerka, teď cvičí jógu

Podnikatel.cz: Tyto pojmy k #EET byste měli znát

Tyto pojmy k #EET byste měli znát

Podnikatel.cz: Letáky? Lidi zuří, ale ony stále fungují

Letáky? Lidi zuří, ale ony stále fungují

Podnikatel.cz: Instalatér, malíř a elektrikář. "Vymřou"?

Instalatér, malíř a elektrikář. "Vymřou"?

120na80.cz: Co je padesátkrát sladší než cukr?

Co je padesátkrát sladší než cukr?

Lupa.cz: Patička e-mailu závazná jako vlastnoruční podpis?

Patička e-mailu závazná jako vlastnoruční podpis?

Vitalia.cz: Muž, který miluje příliš. Ženám neimponuje

Muž, který miluje příliš. Ženám neimponuje

Vitalia.cz: Jak Ondra o astma přišel

Jak Ondra o astma přišel