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.