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:

  • 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?
120na80.cz: Víte, co je svobodná menstruace?

Víte, co je svobodná menstruace?

Lupa.cz: Elektronika tajemství zbavená. Jak s ní začít?

Elektronika tajemství zbavená. Jak s ní začít?

Vitalia.cz: „Sjíždět“ porno není bez rizika

„Sjíždět“ porno není bez rizika

Podnikatel.cz: Farmářské trhy mají u EET odklad

Farmářské trhy mají u EET odklad

Vitalia.cz: Ženy, které milují příliš, jsou neštěstí

Ženy, které milují příliš, jsou neštěstí

Root.cz: Xiaomi má vlastní notebook podobný Macu

Xiaomi má vlastní notebook podobný Macu

Měšec.cz: Udali ho na nelegální software a přišla Policie

Udali ho na nelegální software a přišla Policie

DigiZone.cz: Fotbal na O2 TV Sport posiluje

Fotbal na O2 TV Sport posiluje

Vitalia.cz: Vakcína Cervarix je oficiálně i pro chlapce

Vakcína Cervarix je oficiálně i pro chlapce

Měšec.cz: Test: Výběry z bankomatů v cizině a kurzy

Test: Výběry z bankomatů v cizině a kurzy

Měšec.cz: Investiční pasti. Děláte to, co ostatní, ale proděláváte

Investiční pasti. Děláte to, co ostatní, ale proděláváte

Podnikatel.cz: Zajímavý paradox: Daří se vedle konkurence

Zajímavý paradox: Daří se vedle konkurence

Lupa.cz: Samořídicí taxíky jsou tu. Začíná s nimi Uber

Samořídicí taxíky jsou tu. Začíná s nimi Uber

Podnikatel.cz: Česká pošta vycouvala ze služby ČP Cloud

Česká pošta vycouvala ze služby ČP Cloud

Vitalia.cz: Co potřebujete vědět o zubech moudrosti?

Co potřebujete vědět o zubech moudrosti?

DigiZone.cz: Sky Deutschland: dvakrát fotbal ve 4K

Sky Deutschland: dvakrát fotbal ve 4K

DigiZone.cz: ČTÚ červenec: rušení trochu vzrostlo

ČTÚ červenec: rušení trochu vzrostlo

DigiZone.cz: AXN u FreeSatu měsíc zdarma

AXN u FreeSatu měsíc zdarma

Měšec.cz: Platíme NFC mobilem. Konečně to funguje!

Platíme NFC mobilem. Konečně to funguje!

Podnikatel.cz: OSA zdraží, ale taky přidá nový poplatek

OSA zdraží, ale taky přidá nový poplatek