an overview of the windows phone 7 platform
DESCRIPTION
This presentation gives an overview of the whole Windows Phone 7 platform. It was given at an internal BEKK meeting in December 2010.TRANSCRIPT
Windows Phone 7
Jonas Follesø
BEKK Avdelingsmøte 02. Desember 2010
AGENDA:- WP7 PLATFORM- PHONE APIs- BLEND 4- MARKET PLACE- TDD- RUBY- DEMOS!
htt
p:/
/ww
w.fl
ickr
.com
/ph
oto
s/2
07
92
78
7@
N0
0/2
24
86
23
39
1/
WINDOWS PHONE 7
A FRESH START!
XNA FOR GAMES
SILVERLIGHT FOR APPS
KNOW SILVERLIGHT?
THEN YOU KNOW WP7!
HELLO WORLD
DEMO
METRO DESIGN
LANGUAGE
BLEND 4DEMO
METRO RESOURCES
• Windows Phone 7 Metro Design UI Book PDF - http://bit.ly/fFPDzw
• UI Design and Interaction Guide for Windows Phone 7 v2.0 - http://bit.ly/b2SUlh
• Design Templates for Windows Phone 7 - http://bit.ly/cNQO8j
LAUNCHERS & CHOOSERS
htt
p:/
/ww
w.fl
ickr
.com
/ph
oto
s/m
ad
_hou
se_p
hoto
gra
ph
y/
44
40
87
13
80
/
• CameraCaptureTask• EmailAddressChooserTask• EmailComposeTask• MarketplaceDetailTask• MarketplaceHunTask• MarketplaceReviewTask• MarketplaceSearchTask• MediaPlayerLauncher• PhoneCallTask• PhoneNumberChooserTask• PhotoChooserTask• SaveEmailAddressTask• SavePhoneNumberTask• SearchTask• SmsComposeTask• WebBrowserTask
LAUNCH BUILT IN APP WITH SOME DATA
htt
p:/
/ww
w.fl
ickr
.com
/ph
oto
s/2
86
34
33
2@
N0
5/4
05
47
66
77
0/
private void smsCompose_Click(object sender, RoutedEventArgs e){ var smsCompose = new SmsComposeTask(); smsCompose.To = "97706660"; smsCompose.Body = "Hello NNUG!"; smsCompose.Show();}
LAUNCH BUILT IN APP TO CHOOSE
SOME DATA
private void choose_Click(object sender, RoutedEventArgs e){ var emailChooser = new EmailAddressChooserTask(); emailChooser.Completed += emailChooser_Completed; emailChooser.Show();}
private void emailChooser_Completed(object sender, EmailResult e){ if(e.TaskResult == TaskResult.OK) email.Text = e.Email;}
CHOSER & LAUCHER
DEMO
EXECUTION MODEL &
TOMBSTONING
htt
p:/
/ww
w.fl
ickr
.com
/ph
oto
s/9
81
09
48
@N
05
/15
83
50
67
87
/
NO MULTI TASKING
BUT...
htt
p:/
/ww
w.fl
ickr
.com
/ph
oto
s/n
3p
tun
3r/
33
76
69
74
90
/
FAST ACTIVATION &
DEACTIVATION
GIVES IMPRESSION OF
APP RUNNING IN
BACKGROUND
htt
p:/
/ww
w.fl
ickr
.com
/ph
oto
s/ci
rox/3
63
28
41
94
/
THE 4 EVENTS OF THE APP LIFE CYCLE
Application_LaunchingApplication_DeactivatedApplication_ActivatedApplication_Closing
Launching Running
Closing Deactivating Activating
Chooser/Task/Other
PERSISTENT DATA
• Data shared by all instances of app
• Save and loaded from Isolated Storage
• Load on start-up, save on user action or when closing
TRANSIENT STATE
• Data for instance of application
• Stored in State Dictionary
• App or Page level state
PAGE STATE• Poisition of ScollViewer• Content of TextBox• State of other UI elements
• Managed by State property on Page object
• OnNavigatedTo & OnNavigatedFrom
protected override void OnNavigatedFrom(NavigationEventArgs e){ State.Add("VerticalOffset", scrollView.VerticalOffset); State.Add("HorizontalOffset", scrollView.HorizontalOffset);}
protected override void OnNavigatedTo(NavigationEventArgs e){ if(State.ContainsKey("VerticalOffset") && State.ContainsKey("HorizontalOffset")) { scrollView.ScrollToVerticalOffset( Convert.ToDouble(State["VerticalOffset"]));
scrollView.ScrollToHorizontalOffset( Convert.ToDouble(State["HorizontalOffset"])); }}
APP STATE• State not associated with
spesific page
• Managed by State property on PhoneApplicationService
private void Application_Deactivated(object sender, DeactivatedEventArgs e){ var viewModel = (ViewModel)RootFrame.DataContext; PhoneApplicationService.Current.State .Add("ExpenceReport", viewModel);}
private void Application_Launching(object sender, LaunchingEventArgs e){ if(StorageHelper.FileExists("ExpenceReport.xml")) { var viewModel = StorageHelper.Load<ViewModel>("ExpenceReport.xml"); viewModel.IsDirty = false; RootFrame.DataContext = viewModel; } else { RootFrame.DataContext = new ViewModel(); }}
APP MODEL DEMO
htt
p:/
/ww
w.fl
ickr
.com
/ph
oto
s/n
3p
tun
3r/
33
76
69
74
90
/
Launching Running
Closing Deactivating Activating
Chooser/Task/Other
PUSH NOTIFICATIONS
WHEN APP IS NOT RUNNING
TWO TYPES OF
NOTIFICATIONS
WP7 PUSH NOTIFICATIONS
Microsoft Push
Notification
Services
Your Web Applicatio
n
PUSH CLIENT
Notification Namespaces
Push Library
Your WP Application
1Open Channel
2 Hand off channel
URL
3 Pushmessage
4Push message
private void open_Click(object sender, RoutedEventArgs e){ var channel = HttpNotificationChannel.Find("NNUG");
if (channel == null) { channel = new HttpNotificationChannel("NNUG"); }
channel.ChannelUriUpdated += channel_ChannelUriUpdated; channel.ShellToastNotificationReceived += channel_ShellToastNotificationReceived; channel.Open();}
private void channel_ShellToastNotificationReceived
(object sender, NotificationEventArgs e){ foreach (var text in e.Collection) output.Text += text + "\r\n";}
PUSH NOTIFICATION
S FOR TILES
PUSH NOTIFICATION
S DEMO
htt
p:/
/ww
w.fl
ickr
.com
/ph
oto
s/ko
zlosk
i/2
30
65
10
52
0/
ISOLATED STORAGE
FOR SIMPLE DATA STORAGE
NOSQL?NO PROBLEM!
ISOLATED STORAGE
DEMO
htt
p:/
/ww
w.fl
ickr
.com
/ph
oto
s/om
arr
un
/46
72
53
12
53
/in
/ph
oto
stre
am
ACCELEROMETER
htt
p:/
/ww
w.fl
ickr
.com
/ph
oto
s/h
ow
zey/2
88
04
55
76
2/
var acc = new Accelerometer(); acc.ReadingChanged += acc_ReadingChanged;
private void acc_ReadingChanged (object sender, AccelerometerReadingEventArgs e){ double x = e.X; double y = e.Y; double z = e.Z;}
LOCATION AWARENESSIS KEY WHEN
ON THE GO
SAME API IN .NET 4 &
WP7
htt
p:/
/ww
w.fl
ickr
.com
/ph
oto
s/p
hoto
gra
ham
/19
83
24
03
1/
private void start_Click(object sender, System.Windows.RoutedEventArgs e){ var watcher = new GeoCoordinateWatcher(GeoPositionAccuracy.High); watcher.PositionChanged += watcher_PositionChanged; watcher.Start();}
private void watcher_PositionChanged(object sender, GeoPositionChangedEventArgs<GeoCoordinate> e){ var location = e.Position.Location; var lat = location.Latitude; var lon = location.Longitude;}
TDD
FUNDAMENTALPRACTICE
htt
p:/
/ww
w.fl
ickr
.com
/ph
oto
s/m
ad
_hou
se_p
hoto
gra
ph
y/
44
40
87
13
80
/
SAME SILVERLIGHT
UNIT TESTING FRAMEWORK
ON WP7
FLIGHTS NORWAY
MONITORARRIVALS AND
DEPARTURES
htt
p:/
/ww
w.fl
ickr
.com
/ph
oto
s/sv
en
werk
/2
18
18
49
28
0/
RESTSERVICES
WITH FLIGHT INFORMATION
http://flydata.avinor.no/http://open.bekk.no/2009/12/13/hva-skjer-nar-man-gir-bort-flydata-gratis/
FLIGHTS NORWAY
DEMO
RUBY ON WP7• IronRuby runs on WP7
• Bases on Silverlight & DLR
• Some limitations:• No Reflection.Emit• No Gems• And probably many
more...
IronRuby on WP7 DEMO
MARKET PLACE
• Not available in Norway on launch... but you can Publish Apps
• 99$ for membership
• 30/70 splitt
TILE FLOOD
TILE FLOOD
TILE FLOODDEMO
SUMMARY:- WP7 PLATFORM- PHONE APIs- TDD- BLEND 4- RUBY- DEMOS!
htt
p:/
/ww
w.fl
ickr
.com
/ph
oto
s/2
07
92
78
7@
N0
0/2
24
86
23
39
1/
FORK ME ON GITHUB
http://github.com/follesoe/
/FlightsNorway/DynamicWP7
/MSDNLiveOctober2010
BEKK CONSULTING ASSKUR 39, VIPPETANGEN. P.O. BOX 134 SENTRUM, 0102 OSLO, NORWAY.
WWW.BEKK.NO
Jonas FollesøSenior Consultant+47 977 06660
[email protected]@follesoe.no