Hlavní navigace

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?

3. 5. 2013 0:05

XMen (neregistrovaný)

Nie .NET nefici pod linuxom aspon pokial mam spravne informacie. Pod linuxom existuje iba 3rd party implementacia s nazvom mono, ktora ani nieje zrovna spolahliva a nepokryva 100% funkcnost. .NET moze teoreticky fungovat pod linuxom vo wine ale tam to tiez nieje ziadna slava

Podnikatel.cz: Přehledná titulka, průvodci, responzivita

Přehledná titulka, průvodci, responzivita

Vitalia.cz: To není kašel! Správná diagnóza zachrání život

To není kašel! Správná diagnóza zachrání život

Vitalia.cz: Chtějí si léčit kvasinky. Lék je jen v Německu

Chtějí si léčit kvasinky. Lék je jen v Německu

Měšec.cz: mBank cenzuruje, zrušila mFórum

mBank cenzuruje, zrušila mFórum

Měšec.cz: Air Bank zruší TOP3 garanci a zdražuje kurzy

Air Bank zruší TOP3 garanci a zdražuje kurzy

Lupa.cz: Insolvenční řízení kvůli cookies? Vítejte v ČR

Insolvenční řízení kvůli cookies? Vítejte v ČR

Vitalia.cz: Co pomáhá dítěti při zácpě?

Co pomáhá dítěti při zácpě?

DigiZone.cz: Rádio Šlágr má licenci pro digi vysílání

Rádio Šlágr má licenci pro digi vysílání

Lupa.cz: Teletext je „internetem hipsterů“

Teletext je „internetem hipsterů“

Podnikatel.cz: Hledáte investora? Neunáhlete se

Hledáte investora? Neunáhlete se

Podnikatel.cz: Chtějte údaje k dani z nemovitostí do mailu

Chtějte údaje k dani z nemovitostí do mailu

Root.cz: Certifikáty zadarmo jsou horší než za peníze?

Certifikáty zadarmo jsou horší než za peníze?

120na80.cz: Na ucho teplý, nebo studený obklad?

Na ucho teplý, nebo studený obklad?

Vitalia.cz: Tesco: Chudá rodina si koupí levné polské kuře

Tesco: Chudá rodina si koupí levné polské kuře

Lupa.cz: Co se dá měřit přes Internet věcí

Co se dá měřit přes Internet věcí

Vitalia.cz: Mondelez stahuje rizikovou čokoládu Milka

Mondelez stahuje rizikovou čokoládu Milka

DigiZone.cz: Sat novinky: slovenská TV8 HD i ruský NTV Mir

Sat novinky: slovenská TV8 HD i ruský NTV Mir

Vitalia.cz: Dáte si jahody s plísní?

Dáte si jahody s plísní?

DigiZone.cz: Sony KD-55XD8005 s Android 6.0

Sony KD-55XD8005 s Android 6.0

Měšec.cz: U levneELEKTRO.cz už reklamaci nevyřídíte

U levneELEKTRO.cz už reklamaci nevyřídíte