Windows Phone ohjelmointi (Materiaali jatkuvassa kehityksessä) ● – – – – – – – Tavoitteita tälle luennolle Tutustutaan mobiililaitteen ominaisuuksiin. Tutustutaan Visual Studio -ympäristöön Tutustutaan Windows Phone projektiin Visual Studiossa Tehdään Hello world Testataan Helloworld emulaattorissa Laskukone luentoesimerkkinä Harjoitustehtävä 3: Tee Helloworld sovellus... • Viimeinen kalvo: Lähteet… Mika Saari Developer status Microsoftilta Microsoftille vaaditaan developer -status, jotta asiat toimisivat (helpommin?) ● Dreamspark -tilin kautta saatavilla alennuskoodi www.tut.fi/pop - Opiskelu – IT-palvelut – ohjelmistot ja lisenssit josta löytyy ohjeet dreamsparkkiin. ● Dreamsparkissa “app development” - “Windows Phone 8 Learn More” - “GET YOUR REGISTRATION CODE” sivun alaosassa. ● Ja sitten rekisteröitymään Windows Phone Centeriin ● ● ● Azure – pilvipalvelut on myös saatavilla käyttöön kuukauden testiajaksi, jonka jälkeen alkaa “Pay – As – You – Go” -laskutuskausi. Opiskelija -statuksella testiaika saattaa olla pidempi... Azure :sta löytyy tälle kurssille mm. SQL-tietokanta, jos sellaista haluaa kokeilla Mika Saari Mobiililaite – Windows Phone • Prosessori – Vähintään 1 Ghz • Lumia 800 : 1,4 Ghz • Lumia 1520: Quad-core 2.2 GHz • Käyttöjärjestelmä – WP7, WP7.5 , WP7.8 , WP 8 tai WP 8.1 • Lumia 1520: Windows Phone 8.12 with Lumia Denim – Ei ole yhteensopiva aikaisempien Windows puhelimien kanssa, eikä pöytäkone windows 7:n kanssa. – Windows 8 ja 8.1 yhteensopivuus... – Optimoitu hitaammille prosessoreille, sekä akkukäyttöisille laitteille • Kosketusnäyttö • Lumia 800: 800x480, • Lumia 1520:Full HD (1920 x 1080) – Landscape tai portrait- näyttö (Vaaka- tai pystysuunnassa) Mika Saari Mobiililaite – Windows Phone • Kosketusnäyttö – Capacitive multi-touch – (toinen tekniikka: resistiivinen kosketusnäyttö) ● Pystyy hallitsemaan useaa kosketusta yhtäaikaa (esim. piirto viidellä sormella) • Lokaatio – Lumia 1520: Magnetometer, A-GPS, Cellular and Wi-Fi network positioning, A-GLONASS • Kiihtyvyysanturi – x, y ja z suunnissa mahdollista. – Kertoo puhelimen liikkeen tai asennon(esim. sovellus tekee ruudunkäännön) • Kompassi (esim. kääntää kartan oikeaan suuntaan) • Gyroskooppi (sovellus voi mitata puhelimen liikettä) • Liike antureiden tiedon käsittelyyn järjestelmä tarjoaa mMotion -luokan • … Mika Saari Mobiililaite – Windows Phone • Kamera – 5Mpix tai parempi • Lumia 800: 8Mpix • Lumia 1520: 20Mpix – Sovellukset voivat käyttää kameraa tai sen ottamia kuvia – (Kuvien siirto Zune -ohjelmistolla) – Nappulat: Start, Back, Lock, Search, Camera, Volume – Toimivat puhelinversiosta riippumatta aina samanlaisesti – Sovellukset voivat käyttää nappuloita, mutta niiden käyttöä on rajoitettu(esim back nappula keskeyttää sovelluksen toiminnan joten sen uudelleen ohjelmointi saattaisi aiheuttaa ongelmia) – Virtuaalinäppäimistö sovellusten käytössä Mika Saari Mobiililaite – Windows Phone • Keskusmuisti: Vähintään 512MB • Lumia 800: 512MB • Lumia 1520: 2GB • Nopeampaa • Sovellukset ajonaikana täällä • Massamuisti vähintään 4GB • Lumia 800: 16GB • Lumia 1520:32 GB + MicroSD(max 64 GB) • Ohjelmat, data ja mediatiedostot täällä • Säilyttää tiedot kun puhelin sammutetaan • Verkko-ominaisuudet(Lumia 1520) • Wi-Fi: WLAN IEEE 802.11 a/b/g/n/ac • LTE network bands3: 1, 3, 7, 8, 20 • LTE max data speed DL: 150 Mbps • LTE max data speed UL: 50 Mbps • WCDMA network: 850 MHz, 900 MHz, 1900 MHz, 2100 MHz • WCDMA max data speed DL: HSDPA - 42.2 Mbps • WCDMA max data speed UL: HSUPA - 5.76 Mbps • GSM network: 850 MHz, 900 MHz, 1800 MHz, 1900 MHz • GSM max data speed DL: EGPRS 236.8 kbps • GSM max data speed UL: EGPRS 236.8 kbps • Tiedonsiirto puhelinverkon yli rajoitettu(yksittäisen latauksen koko) • Bluetooth: Bluetooth 4.0 Mika Saari Windows Phone työkalut Mitä sovelluksia tarvitaan? – Visual Studio 2013 tai Visual Studio express. – https://dev.windowsphone.com/en-us/downloadsdk Mitä tarvitaan sovelluksen laitteessa testaukseen? – Laite: Windows phone 8 – Microsoft account (Aikaisemmin Windows Live ID) – Kehittäjä tili: Dev Center developer accoun • https://dev.windowsphone.com/en-us – (WP 7.1 vaatii Zune ohjelmiston) Puhelin täytyy rekisteröidä sovelluskehitys -laitteeksi – How to: Register Your Phone for Development Mika Saari Windows Phone -ohjelmointi • Tehdään Helloworld sovellus… • Tehdään laskukone, joka laskee kahden syöttökentän arvon yhteen. – XAML-koodin muutokset – C# muutokset – Debug tietojen antaminen... • Sovelluksen asennus laitteeseen... • Seuraava aihe: Sovelluksen elinkaari ja Sovelluksella on useita eri tiloja... Mika Saari Luentoharjoitus 1: koodataan laskukone Helloworld Tekstinsyöttö ja nappulat – Helloworld tekstikentällä Laskukone, jossa yhteenlasku – Tehdään laskukone, joka laskee kahden syöttökentän arvon yhteen. – XAML-koodin muutokset – C# muutokset – Debug tietojen antaminen... – Sovelluksen asennus laitteeseen... Optiot ● Miten vaihdetaan virtuaalinäppäimistö numeronappuloiksi? ● Programming windows Phone 7: chapter 7. Käyttöliittymän muokkaus suoraan XAMLkoodissa ● Toteuta nelilaskin ● Siirry harjoitustehtävään 3 Mika Saari Luokan 257 asetukset ● ● ● ● Windows phone kehitys vaatii Windows 8.1:n. Windows 8.1 virtuaalikone löytyy osoitteesta: c:/work Visual Studio 2013 prof löytyy virtuaalikoneesta. Developer tunnus: [email protected] ● TTYPoriUser -käyttäjä Windows 8.1 :ssä ● Salasanat saa kysymällä Mikalta... Mika Saari WP luento 2: Tilan ja Tiedon tallennus Windows phone ohjelmointi ja tiedon tallennus: ● Sovelluksella erilaisia tiloja ● Tilasiirtymät vaikuttavat tietoihin ● Miten säilytetään sivun tiedot jos sivu suljetaan? ● Miten säilytetään sovelluksen tiedot jos sovellus suljetaan? ● Oheismateriaalia – Esimerkit: luentoharjoitus2 ja luentoharjoitus3 – MSDN -dokumentit – App activation and deactivation for Windows Phone – How to preserve and restore page state for Windows Phone Mika Saari Moniajo – Multitasking MSDN: Multitasking for Windows Phone “Only one 3rd party application can be executed simultaneously” ● Eli moniajo on toteutettu näin. ● Uuden soveluksen käynnistäminen pysäyttää ajossa olevan sovelluksen (siirtyy dormant-tilaan) ● Pysäytetty sovellus voidaan poistaa muistista (siirtyy tombstoned -tilaan) ● Dormant vs. Tombstoned -tila ● Dormant säilyttää sovelluksen tiedot ● Tombstoned hukkaa sovelluksen tiedot, jollei koodari ole niitä tallettanut. ● Emulaattorissa sovelluksen voi pakottaa Tombstoned tilaan: LaskinDemo01 >> properties >> Debug >> Tombstone upon deactivation while debugging. - Mika Saari Sovelluksen elinkaari The instance of application class receives the life cycle events: ● Launching ● Closing ● Activating ● Deactivating Mika Saari Sovelluksen elinkaari MSDN: App activation and deactivation for Windows Phone Mika Saari Debug viestejä tilasta tai tilanvaihdosta Tavoitteena saada seitsemän debug viestiä: 1. MainPage.xaml.cs: OnNavigatedFrom 2. MainPage.xaml.cs: OnNavigatedTo 3. App.xaml.cs: Launching 4. App.xaml.cs: Activated (4.1 dormant tai 4.2 tombstoned -tilasta) 5. App.xaml.cs: DeActivated 6. App.xaml.cs: Closing Luentoharjoituksessa 2 Lisätään jokaiseen kohtaan debug-viesti ja yritetään saada kaikki tulostumaan... ● Esimerkki koodia: luentoharjoitus02.zip Mika Saari Debug viestit 1 ja 2 MainPage.xaml.cs tiedostoon protected override void OnNavigatedFrom(System.Windows.Navigation.NavigationEventArgs e) { base.OnNavigatedFrom(e); System.Diagnostics.Debug.WriteLine("Event 1: OnNavigatedFrom"); //tilan tallennus jos jotain back nappulaa painetaan } protected override void OnNavigatedTo(System.Windows.Navigation.NavigationEventArgs e) { base.OnNavigatedTo(e); System.Diagnostics.Debug.WriteLine("Event 2: OnNavigatedTo"); //Tilan lataus, jos tietoa on tallennettu } Mika Saari Debug viesti Dormant tai Tombstoned Dormant vai Tombstoned -tila ● Dormant -tila: Sovelluksen tieto säilyy ilman koodausta. ● Tombstoned -tila: Sovelluksen tieto katoaa ilman koodausta. ● Debug viestit 4.1 ja 4.2 ● private void Application_Activated( object sender, ActivatedEventArgs e) { if (e.IsApplicationInstancePreserved){ // Dormant - all data in place } else { // Tombstoned - all data gone: cold start } } Mika Saari Luentoharjoitus 2. Luodaan projekti: Blank App (Windows Phone Silverlight) Tavoitteet: ● Edellä mainittuja tilasiirtymiä tapahtuu ● Dormant- ja tombstoned-tilat ● ● Tekstikentät säilyttävät arvonsa vaikka siirryttäisiin tombstoned -tilaan Seuraillaan vapaasti dokumenttia: – How to preserve and restore page state for Windows Phone Mika Saari Model – View – ViewModel (MVVM) Arkkitehtuurimalli windows phone – sovelluksissa ● XAML -koodin ominaisuuksien huomiointi ● Data Bindings ● Data Templates ● Commands ● Event routing ● ● Lisää: ● Esitys vertaa MVC -mallia MVVM-malliin ● http://channel9.msdn.com/events/MIX/MIX10/EX14 ● Mika Saari Tiedon tallennus • Yleisesti MSDN:ssä: ● ”Data for Windows Phone” • Page Dictionary – ”Works between the events” – NavigatedTo/NavigatedFro m – Activated/Deactivated • • – – – • Application Dictionary Isolated Storage IsolatedSettings Files Streams Mika Saari Aikaa vievät toimenpiteet ja async ● ● ● ● “Using asynchronous programming helps your app stay responsive when it does work that might take an extended amount of time. For example, an app that downloads content from the Internet might spend several seconds waiting for the content to arrive. If you use a synchronous method on the UI thread to retrieve the content, the app is blocked until the method returns. The app won't respond to user interaction, and because it seems non-responsive, the user might become frustrated. A much better way is to use asynchronous programming, where the app continues to run and respond to the UI while it waits for an operation to complete” MSDN: Asynchronous programming (Windows Runtime apps) channel9.msdn.com: Part 28: Understanding Async and Awaitable Tasks Esimerkki: Async metodien käynnistäminen erilliseen säikeeseen Mika Saari Luentoharjoitus 3 • Tavoitteena luoda sovellus, joka tallettaa textboxin sisällön tiedostoon. • Kun sovellus käynnistetään niin tiedosto ladataan automaattisesti textboxin sisällöksi. • Async-metodin käyttö latauksessa • Sisältönä pitäisi olla käyttäjän antama syöte • Lisäominaisuuksia saa vapaasti toteuttaa harjoitustehtävään 5. • Seuraillaan vapaasti MSDN -dokumentteja – Quickstart: Working with files and folders in Windows Phone 8 – How to preserve and restore app state for Windows Phone Mika Saari Tiedon tallennus oliona ● ● ● ● ● Tarvitaan – Luokka, josta voidaan luoda olioita – Tietorakenne, johon olioita talletetaan Olioden käyttö sovelluksen datakomponentteina. Listbox komponentin käyttö tietorakenteen datan esittämiseen. Luentoesimerkki ... Mika Saari Luokka - olio namespace Luentoharjoitus4 { public class MyItem { private string myVar; public string FirstString { get { return myVar; } set { myVar = value; } } } } Mika Saari Tietorakenne olioista - ObservableCollection using System.Collections.ObjectModel; namespace Luentoharjoitus4 { public class MyList : ObservableCollection<MyItem> { public MyList() { Add(new MyItem { FirstString = " Joo", SecondString = "Jee" }); } } } Mika Saari ListBox -komponentti tietorakenteen esittämiseen Virhe: Tieto pitäisi olla FirstString Mika Saari MainPage.xaml.cs Tiedon ja näkymän yhdistäminen Public partial class MainPage{ Private MyList lista; Public MainPage(){ lista=new MyList(); InitializeComponent(); ListaBox1.DataContext = lista; } } Mika Saari Luentoharjoitus 4.1: listbox käyttö Toteutetaan edellisten kalvojen mukainen sovellus ● Tieto omana olionaan – Kirja- luokka: nimi ja tekija ● Tiedoista kokoelma – Kirjasto ● Kokoelma listBox -elementtiin – Textblock-palikoina MSDN: How to: Display Data in a ListBox Mika Saari Windows phone – sovelluksessa navigointi Useiden näyttöjen käsittely ja viestinvälitys näyttöjen välillä selviää seuraavan tutoriaalin avulla. – How to perform page navigation on Windows Phone 8 Yleistietoa sovelluksessa navigoinnista. – MSDN: In-app navigation for Windows Phone Yleistietoa ruudun suunnasta(vaaka vai pysty) ja kosketusnäytön eri kosketusvaihtoehdoista. – MSDN: Navigation, orientation, and gestures for Windows Phone Panorama näytön koostaminen – How to create a panorama app for Windows Phone Mika Saari Luentoharjoitus 4.2 : Panorama Toteutetaan panorama näyttö Kotikirjasto -sovellukseen. ● Ainakin kaksi panoramaItem-komponenttia ● LisaaKirja() -metodi kirjasto luokkaan. Mika Saari LuentoHarjoituksia Olioden tiedontallennus Esitellään Kolme eri tapaa ( Muita?) Luentoharjoitus 4.3 – Toinen tallentaa ja lataa olioiden tiedot tekstimuodossa. – Välimerkkinä “;” Luentoharjoitus 4.4 – Ensimmäinen tallentaa ja lataa kokoelman olioita – Käytetään hyväksi olioiden serialisaatioo (Oliokurssin asioita...) – SerializeHelper luokka on geneerinen(ei välitä olioiden tyypeistä) Luentoharjoitus 4.5 – Tallennetaan tiedot Azuren SQL-palvelimelle – Tätä ei toteutettu, mutta ohjeet löytyy: Get started with Mobile Services http://www.windowsazure.com/en-us/documentation/articles/mobile-services-windows-phone-get-started/ Get started with data in Mobile Services http://www.windowsazure.com/en-us/documentation/articles/mobile-services-windows-phone-get-starteddata/ Mika Saari Tiedon tallennus – txt-tiedostoon using System.Collections.ObjectModel; using System.IO.IsolatedStorage; using System.IO; namespace AkuAnkkaPanorama{ public class Luettelo : ObservableCollection<Taskukirja>{ IsolatedStorageFile tiedosto; public Luettelo(){ tiedosto = IsolatedStorageFile.GetUserStoreForApplication(); LataaTaskukirjat(); //Add(new Taskukirja { TaskukirjanNro = " 104", TaskukirjanNimi = "Aku saa aikaan" }); } public void talletaTaskukirjat(ObservableCollection<Taskukirja> kirjat){ IsolatedStorageFileStream kirjatiedosto; //onko olemassa if (!tiedosto.FileExists("akuankat.txt")){ kirjatiedosto = tiedosto.OpenFile("akuankat.txt", FileMode.Create, FileAccess.Write); } else{ kirjatiedosto = tiedosto.OpenFile("akuankat.txt", FileMode.Open, FileAccess.Write); } using (StreamWriter writer = new StreamWriter(kirjatiedosto)){ for (int i = 0; i < this.Count; i++){ writer.WriteLine(this[i].TaskukirjanNro + ";" + this[i].TaskukirjanNimi); } writer.Close(); } } }} Mika Saari Tiedon tallennus – txt-tiedostoon public void LataaTaskukirjat() try { { IsolatedStorageFileStream kirjatiedosto = tiedosto.OpenFile("akuankat.txt", FileMode.OpenOrCreate, FileAccess.Read); string rivit; string[] nroJaNimi = new string[2]; this.Clear(); using (StreamReader reader = new StreamReader(kirjatiedosto)) while ((rivit = reader.ReadLine()) != null) { { nroJaNimi = rivit.Split(';'); if (nroJaNimi.Length > 0) { try{ Add(new Taskukirja { TaskukirjanNro = nroJaNimi[0], TaskukirjanNimi = nroJaNimi[1] }); } catch (IndexOutOfRangeException er) { System.Diagnostics.Debug.WriteLine("Virhe: sisalto__" + nroJaNimi[0] + "__"); tiedosto.DeleteFile("akuankat.txt"); } } else System.Diagnostics.Debug.WriteLine("nroJaNimi - Pituus heittää"); } } } catch (IsolatedStorageException e) e.ToString(); } } }} Mika Saari { Tiedon tallennusluokka – Collection using System.IO.IsolatedStorage; using System.IO; using System.Runtime.Serialization; namespace harjoitus4_5_6_v2{ public class SerializeHelper { public static void SaveData<T>(string fileName, T dataToSave) using (IsolatedStorageFile store = IsolatedStorageFile.GetUserStoreForApplication()) try { { { if (store.FileExists(fileName)) { store.DeleteFile(fileName); } using (IsolatedStorageFileStream stream = store.OpenFile(fileName, System.IO.FileMode.Create, System.IO.FileAccess.Write)) { var serializer = new DataContractSerializer(typeof(T)); serializer.WriteObject(stream, dataToSave); } } catch (Exception e) { //MessageBox.Show(e.Message); return; } } } Mika Saari Tiedon tallennusluokka – Collection public static T ReadData<T>(string fileName) using (IsolatedStorageFile store =IsolatedStorageFile.GetUserStoreForApplication()) if (store.FileExists(fileName)) { { { using (IsolatedStorageFileStream stream = store.OpenFile(fileName, FileMode.OpenOrCreate, FileAccess.Read)){ try{ var serializer = new DataContractSerializer(typeof(T)); return (T)serializer.ReadObject(stream); } catch (Exception){ return default(T); } } return default(T); } } }} Mika Saari } Tiedon tallennusluokka – Collection SerializeHelper-luokan käyttö Tieto ObservableCollection -oliossa. public partial class PanoramaPage1 : PhoneApplicationPage { private Paivakirja paivis; public PanoramaPage1() { paivis = new Paivakirja(); InitializeComponent(); lataa(); listBox1.DataContext = paivis; } public void tallenna() { SerializeHelper.SaveData<Paivakirja>("AllEvents", paivis); } public void lataa() { paivis = (Paivakirja)SerializeHelper.ReadData<Paivakirja>("AllEvents"); } Huomioi: nullreference if (paivis != null){...}else { paivis = new Paivakirja(); ...} Mika Saari Expression Blend® 4 -työkalu • • • • • • – – – – Mainoslauseita: Create rich web experiences, games, desktop apps, and more Design apps that use the full power of Silverlight Take your ideas from concept to finished project Work effectively with design tools, Expression Blend and Visual Studio … Tutoriaaleja Getting started with Blend for Visual Studio 2013 Blend for Visual Studio 2012 Designing Windows Phone apps with Blend http://www.microsoft.com/design/toolbox/school/tutorials.aspx Mika Saari Luentoharjoitus 5: Blend Testataan Blend työkalua johonkin olemassa olevaan windows phone sovellukseen. - Tavoitteena muuttaa TextBlock componentin ominaisuuksia. Apuna: Designing Windows Phone apps with Blend Mika Saari WP luento3– Launchers and Choosers. – Windows Phonessa on sisäänrakennuttu toiminnallisuus, jonka avulla voidaan yhdistää sovelluksia toimimaan yhdessä. – Launchers ja choosers käynnistävät toisen sovelluksen(built-in application ) suorittamaan jonkin toiminnan. Eivät palauta mitään... – Choosers yleensä palauttaa jotain tietoa kutsuja sovellukselle – Lisätietoa: • Launchers and Choosers for Windows Phone 8 Mika Saari WindowsPhone: Launchers MSDN:Launchers for Windows Phone 8 PhoneCallTask starts the Phone application with a particular phone number and display name selected. Note that the program cannot place the call, the user must initiate this EmailComposeTask our program can set properties on an email and then launch a task to allow the user to send the message. SmsComposeTask starts the Messaging application and display a new SMS message. Note that the message is not sent automatically. SearchTask starts the Search application using a query you provide WebBrowserTask starts the Web browser and displays the URL you provide. MediaPlayerLauncher starts the Media Player application and play a given media file Mika Saari WindowsPhone: Launcher… How to use the email compose task for Windows Phone 8 • Launchers do not return data or status to your application. 1. Create instance of the phone task type for the launcher 2. Set any required and optional properties of the task object. These determine the behavior of the task application when it invoked 3. Call the show method of the task object private void button1_Click(object sender, RoutedEventArgs e) { sendMail(textBox1.Text, textBox2.Text); } private void sendMail(string subject, string body) { EmailComposeTask email = new EmailComposeTask(); email.Body = body; email.Subject = subject; email.Show(); } Mika Saari Luentoharjoitus 7 – email lähetys sovelluksesta ● ● ● Tehdään sovellus josta voi lähettää sähköpostia Emulaattorin tiliasetukset estää testauksen... luentoharjoitus07.zip Mika Saari Ratkaisu edelliseen using Microsoft.Phone.Tasks; namespace luentoharjoitus6 { public partial class MainPage : PhoneApplicationPage { // Constructor public MainPage() { InitializeComponent(); } private void button1_Click(object sender, RoutedEventArgs e) { sendMail(textBox1.Text, textBox2.Text); } private void sendMail(string subject, string body) { EmailComposeTask email = new EmailComposeTask(); email.Body = body; email.Subject = subject; email.Show(); } Mika Saari Windows Phone Choosers • Choosers can return data and status to your application. However, if the user presses Start while the new application is open, the calling application may never be reactivated. • The following are the general steps for using a Chooser: 1. Create an instance of the task type for the Launcher. 2. Identify the callback method to run after the user completes the task. 3. Set any required and optional properties of the task object. 4. Call the Show method of the task object. 5. Implement the completed event handler to capture data and status after the user completes the task. • ... Mika Saari Windows Phone Choosers CameraCaptureTask starts the Camera application for the user to take a photo EmailAddressChooserTask starts the Contacts application and allows the user to select a contact's email address PhoneNumberChooserTask starts the Contacts application and allows the user to select a contact's phone number. PhotoChooserTask starts the Photo Picker application for the user to choose a photo. SaveEmailAddressTask saves the provided email address to the Contacts list Returns whether or not the save was completed. SavePhoneNumberTask saves the provided phone number to the Contacts list. Returns whether or not the save was completed AddressChooserTask your program can request that the user select an address from the contact the phone GameInviteTask your program can invite another phone user to a multiplayer gaming session SaveContactTask your program can populate a contacts entry and allow the user to save this to a contact list on the phone. Returns whether or not the save was completed. SaveRingtoneTask your program can give the user the option to save an audio file Mika Saari in an appropriate format as a ringtone for the phone Luentoharjoitus 8 ● ● ● ● ● PhotoChooserTask testi Luodaan sovellus, jossa käyttäjä voi valita kuvan puhelimen muistista. Image -komponentti Button -komponentti “How to use the photo chooser task for Windows Phone 8” Mika Saari Ratkaisu edelliseen using Microsoft.Phone.Tasks; namespace Luentoharjoitus08Testi{ public partial class MainPage : PhoneApplicationPage{ PhotoChooserTask photoChooserTask; public MainPage(){ InitializeComponent(); photoChooserTask = new PhotoChooserTask(); photoChooserTask.Completed += new EventHandler<PhotoResult>(photoChooserTask_Completed); } void photoChooserTask_Completed(object sender, PhotoResult e) { if (e.TaskResult == TaskResult.OK){ MessageBox.Show(e.ChosenPhoto.Length.ToString()); System.Windows.Media.Imaging.BitmapImage bmp = new System.Windows.Media.Imaging.BitmapImage(); bmp.SetSource(e.ChosenPhoto); myImage.Source = bmp; } } private void Button_Click(object sender, RoutedEventArgs e){ photoChooserTask.Show(); }}} Mika Saari Camera • – – – • Kameran käyttötapauksia: CameraCaptureTask PhotoChooserTask Embedding camera Kokeillaan viimeistä eli sisällytetään kamera toiminto omaan sovellukseen – – – – • – Etsin ruutu, nappula ja kuva ruutu näyttöön. Microsoft.Devices.PhotoCamera Kuvanotto -logiikka Event handlerit Oheisluettavaa How to create a base camera app for Windows Phone Mika Saari Luentoharjoitus 9 Tavoitteena oma kamera sovellus. 1. Lisää canvas MainPage:en 2. Lisää videoBrush canvasiin <Canvas.Background> <VideoBrush x:Name="theBrush"></VideoBrush> </Canvas.Background> 3. Lisää Button ja Image -komponentit MainPage:en 4. Toteutetaan kuvanotto käyttäen Dispatcher-luokkaa 5. Toteutetaan OnNavigatedTo- ja OnNavigatedFrom -metodit. (käynnistää ja sammuttaa kameran) 6. Nappulasta kuvan otto. 7.Oikeuksien tarkistus: ID_CAP_ISV_CAMERA Mika Saari using Microsoft.Devices; using System.Windows.Media.Imaging; namespace Luentoharjoitus8Camera{ public partial class MainPage : PhoneApplicationPage{ PhotoCamera camera = null; // Constructor public MainPage() { InitializeComponent(); } private void button1_Click(object sender, RoutedEventArgs e) { camera.CaptureImage(); } protected override void OnNavigatedTo(System.Windows.Navigation.NavigationEventArgs e) { base.OnNavigatedTo(e); camera = new PhotoCamera(); theBrush.SetSource(camera); camera.CaptureImageAvailable += new EventHandler<ContentReadyEventArgs>(camera_CaptureImageAvailable); } void camera_CaptureImageAvailable(object sender, ContentReadyEventArgs e) { Dispatcher.BeginInvoke(delegate() { BitmapImage bitmap = new BitmapImage(); bitmap.SetSource(e.ImageStream); image1.Source = bitmap; }); } protected override void OnNavigatedFrom(System.Windows.Navigation.NavigationEventArgs e) { base.OnNavigatedFrom(e); if (null != camera) { camera.CaptureImageAvailable -= camera_CaptureImageAvailable; camera.Dispose(); camera = null; } } Mika Saari Kuvan käsittely http://www.developer.nokia.com/resources/library/Imaging_API_Ref/index.html Puhelimessa voidaan käsitellä kuvaa Nokia Imaging SDK tarjoaa valmiita filttereitä. Mika Saari Luentoharjoitus 10: Kuvan käsittely Kuvan filtteröinti puhelimessa... ● ● ● ● ● ● ● Yleistietoa: http://www.developer.nokia.com/resources/library/Imaging_API_Ref/index.html Quick start: http://developer.nokia.com/resources/library/Lumia/nokia-imaging-sdk/quick-start.html Imaging SDK:n asennus: http://developer.nokia.com/resources/library/Lumia/nokia-imaging-sdk/adding-libraries-to-the-project.html Testifiltteri.zip... Mika Saari Luentoharjoitus: Kuvan käsittely Näytön määrittely: <Grid x:Name="ContentPanel" Grid.Row="1" Margin="12,0,12,0"> <Image x:Name="sourceKuva" HorizontalAlignment="Center" Height="136" Margin="10,10,10,0" VerticalAlignment="Top" Width="436" /> <Image x:Name="targetKuva" HorizontalAlignment="Center" Height="369" Margin="10,228,10,0" VerticalAlignment="Top" Width="436" /> <Button x:Name="valintaButton" Content="Valitse kuva" HorizontalAlignment="Left" Margin="10,151,0,0" VerticalAlignment="top" Width="436" Click="btnChoose_click"/> </Grid> Tarpeelliset kirjastot using System.Windows.Media.Imaging; using Microsoft.Phone.Tasks; using Nokia.Graphics.Imaging; …. Mika Saari Luentoharjoitus: Kuvan käsittely Luokan muuttujat: PhotoChooserTask photoChooserTask = new PhotoChooserTask(); WriteableBitmap writeAbleBitmapSource=null; WriteableBitmap writeAbleBitmapTarget=null; StreamImageSource streamImageSource = null; WriteableBitmapRenderer writeAbleBitmapRenderer = null; FilterEffect filterEffect = null; IList<IFilter> filterlist = new List<IFilter>(); Luokan konstruktori InitializeComponent(); photoChooserTask.Completed += photoChooserTask_Completed; filterlist.Add(new OilyFilter()); writeAbleBitmapSource = new WriteableBitmap(sourceKuva,null); writeAbleBitmapTarget =new WriteableBitmap(targetKuva,null); …. Mika Saari Luentoharjoitus: Kuvan käsittely Kuvan valinta taskin suoritus void photoChooserTask_Completed(object sender, PhotoResult e) { if (e.TaskResult == TaskResult.OK) { writeAbleBitmapSource.SetSource(e.ChosenPhoto); sourceKuva.Source = writeAbleBitmapSource; e.ChosenPhoto.Position = 0; streamImageSource = new StreamImageSource(e.ChosenPhoto); if (writeAbleBitmapRenderer != null) { writeAbleBitmapRenderer.Dispose(); writeAbleBitmapRenderer = null; } if (filterEffect != null) { filterEffect.Dispose(); filterEffect = null; } renderOutputBitmap(); } } Mika Saari Luentoharjoitus: Kuvan käsittely Kuvan käsittely filtterillä private async void renderOutputBitmap() { if(streamImageSource!=null) { if(filterEffect==null) { filterEffect = new FilterEffect(streamImageSource); filterEffect.Filters = filterlist; } if(writeAbleBitmapRenderer==null) { writeAbleBitmapRenderer = new WriteableBitmapRenderer(filterEffect, writeAbleBitmapTarget, OutputOption.PreserveAspectRatio); } writeAbleBitmapTarget = await writeAbleBitmapRenderer.RenderAsync(); targetKuva.Source = writeAbleBitmapTarget; } } private void btnChoose_click(object sender, RoutedEventArgs e) { photoChooserTask.Show(); } Mika Saari Sensors • • – – – • • • – • ● Accelerometer, Compass, Gyroscope Microsoft.devices.Sensors.Motion -Class Start, stop Property currentValue Event CurrentValueChanged Using Microsoft.Devices.Sensors; Using Microsoft.Xna.Framework; Esimerkki: PhoneApp8Accev02 Oheismateriaali How to:gets data from accelerometer for windows phone Mika Saari Luentoharjoitus 11 - kiihtyvyysanturi ● ● ● ● ● ● Lisää referenssit Tee slideri (slider1) Lisää kirjasto Mainpage.xaml.cs -koodia Testaus Luentoharjoitus9Acce.zip Mika Saari Background tasks • Windows phone:ssa ei voi ajaa rinnakkain useampaa sovellusta, Mutta joskus on tarpeen saada sovellus pyörimään taustalla • Windows Phone käyttöjärjestelmä tarjoaa “background processing” -palveluita, joihin koodari voi sijoittaa koodia suorituksee, kun varsinainen sovellus ei ole aktiivinen – Ei käyttöliittymää – Tiukat rajoitukset, että mitä voi tehdä ja mitä ei voi tehdä. – Background Agents Overview for Windows Phone • http://msdn.microsoft.com/en-us/library/hh202942%28v=vs.92%29.aspx – Käyttöjärjestelmä sammuttaa background task:n jos muisti, akku tai verkkoyhteys niin vaatii • Myös käyttäjä voi sammuttaa background task:n • Oheismateriaali: – How to implement background Agents for Windows Phone Mika Saari Luentoharjoitus 12 Background agentin käyttö johonkin... Testaillaan valmista koodia... Mika Saari Tiles for Windows Phone - Tiilet ● ● ● ● Sovelluksen käynnistämiseen tarkoitettu kuvake aloitusruudussa Käytettävissä WP 7, WP 7.1 ja Päivitettynä WP 8, sekä Windows 8 Yksi sovellus voi hallinnoida yhtä tai useampaa tiiltä Useita kokoja: – small, medium, and wide – Loppukäyttäjä voi määrätä koon, sisältö muuttuu koon mukaan. Mika Saari Luentoharjoitus 13 Luodaan sovellus jossa muutetaan tiilen sisältöä sovelluksesta. ● Numeroarvo tiileen ● Teksti tiileen ● Taustakuva tiileen??? ● Testaus: Tiili aloitus näyttöön(pin to start) Oheismateriaalina: ● How to create, delete, and update Tiles for Windows Phone OS 7.1 Mika Saari Vastaus- phoneapp1tiletesti using Microsoft.Phone.Shell; namespace PhoneApp1Tiletesti { public partial class MainPage : PhoneApplicationPage { // Constructor public MainPage() { InitializeComponent(); } private static int counter = 1; private void button1_Click(object sender, RoutedEventArgs e) { ++counter; ShellTile tile = ShellTile.ActiveTiles.First(); if(null!= tile) { StandardTileData data = new StandardTileData(); data.Title = "Juuh"; data.Count = counter; tile.Update(data); MessageBox.Show("updated, c = " + counter); } } Mika Saari Maps and navigation GeoCoordinate, Zoom level 1-20 Map API muuttui windows Phone 8:iin. ● Capability ID_CAP_MAP app manifestiin mukaan ● Maps and navigation for Windows phone 8 Bing Kartat käytettävissä Windows phone 7.1:ssä ● Testataan luentoharjoitus 12:ssa Mika Saari Luentoharjoitus 14 Maps and navigation for windows Phone Tehdään sovellus, jossa karttaruutu ja nappula. Nappula keskittää kartan poriin. Oheismateriaalina: ● Exercise 1: Introduction to the Bing Map Control Mika Saari Luento 7 Expression Blend, XNA Luennon Tavoitteet: ● Expression Blend -työkaluun tutustuminen esimerkkien kautta ● XNA Framework – Oheismateriaalina luento7.zip Mika Saari Luentoharjoitus 15 – Koodaus Expression Blendillä Oheismateriaalia googlesta: Creating a simple app (with Expression Blend) ● Luodaan Windows phone sovellus, jossa perus komponentteja käytössä. Mika Saari Luentoharjoitus 16 – Komponenttien muokkaus Expression Blendillä Alkutilanne: WP7 -sovellus, jossa nappula. Tavoitteet: ● Muutetaan nappulan käyttäytymistä ● Taustakuva ● Taustakuvan vaihto nappuloilla Mika Saari XNA Framework “XNA Framework on Microsoftin kehittämä, oliopohjainen peliohjelmointiin tarkoitettu kirjasto. XNA-ohjelmia voidaan ohjelmoida .NET-yhteensopivilla kielillä. XNA on rakennettu DirectX:n päälle ja pyritty tekemään mahdollisimman yksinkertaiseksi ohjelmoida. Lisäksi XNA-ohjelmien tekemistä varten on tehty laajennuksia Visual Studioon. Tämä maksuton ja harrastajille tarkoitettu ohjelma on nimeltään XNA Game Studio Express. XNA Game Studiosta on olemassa pelitaloille myös täydellisempi versio. XNA-pelit toimivat PC:llä ja Xbox 360:ssä (fi.wikipedia.org/wiki/XNA_Framework, 21.2.2013) ● http://msdn.microsoft.com/en-us/centrum-xna.aspx ● http://xbox.create.msdn.com/en-US/education/documentation ● http://msdn.microsoft.com/en-us/library/bb203940.aspx ● Mika Saari Luentoharjoitus 17 - XNA Pistetään kolmiulotteinen kuva pyörimään puhelimen ruudussa. ● Materiaali: luento7.zip (270 MB – saatavissa luennoitsijalta ) Mika Saari Lähteet Microsoft Press ebook: Programming Windows Phone 7 (PDF) ● Microsoft Press eBook: Programming Windows 8 Apps with HTML CSS and JavaScript (PDF) ● http://www.developer.nokia.com ● Työkalut, App Hub, rekisteröinti, julkaisu ja ohjeet ● http://create.msdn.com ● Windows Phone osio löytyy MSDN:stä ● http://msdn.microsoft.com/library ● Windows Phone itseopiskelumateriaali(myös offline) ● http://msdn.microsoft.com/en-us/WindowsPhoneTrainingCourse ● http://channel9.msdn.com/ ● Muut Windows phone itseopiskelumateriaalit ??? ● Mika Saari .. • • • • • • • • • • • • • • • .. .. .. .. .. .. .. .. .. .. .. .. . . Mika Saari Mika Saari
© Copyright 2024