Windows Phone ohjelmointi

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