WINDOWS PHONE 7 동의대앱창작터윈도우즈폰 7 기본개발과정 2011.07.11 07.15[2 주차 ] 김명정 Microsoft BizSpark Network Partner kmjrabbit@live.com
윈도우폰기본과정 2 주차 1 읷 1 주차정리추가예제, Windows Phone 7 SDK v7.1 beta2 설치 Location Service GPS 정보홗용하기 센서정보짂동 (Vibrate) 처리, 가속도계 (Accelerometer), 멀티터치구현 2 주차 2 읷 센서정보짂동 (Vibrate) 처리, 가속도계 (Accelerometer), 멀티터치구현 공용기능 Task&Chooser 2 주차 3 읷 MultiMedia 그래픽관렦컨트롟사용, 갂단한 MusicPlayer 및동영상재생각종 Transform 요소들 2
윈도우폰기본과정 2 주차 4 읷 툴킷 (toolkit) 홗용 MultiMedia 그래픽관렦컨트롟사용, 갂단한 MusicPlayer 및동영상재생각종 Transform 요소들 2 주차 5 읷 네트워크 WCF 와 LINQ, RSS 구현하기 Notification 3
쉽게시작할수있는개발환경 (1) http://create.msdn.com http://msdn.microsoft.com/ko-kr 세계최대수준의라이브러리및예제 유용한라이브러리소스제공 http://www.codeplex.com Microsoft 개발자방송국읶 Channel 9, 개발자팀블로그, 국내외 Silverlight, Xbox, Windows Phone 개발자커뮤니티등등 4
쉽게시작할수있는개발환경 (2) http://windowsphone.interoperabilitybridges.com/ Guide for ios/iphone Developers iphone App 을 Windows Phone 7 으로변경하는데있어서필수적읶 API mapping Guide 를제공 Guide for Android Developers 안드로이드개발자를위한윈도우폰 API 매핑툴및 Guide 제공 5
Windows Phone 7 이전에 2002 년 11 월 XBox Live Service launched 2006 년 11 월 WPF(XAML) 2007 년 05 월 Games for Windows Live launched 2007 년 09 월 Silverlight(WPF/E) 1.0 released 2008 년 10 월 XNA Game Studio 3.0 (Cross-platform games that work on Windows, Xbox 360, Zune) 2009 년 09 월 ZuneHD (Multi-touch, Metro UI style, FM Radio, MarketPlace) 2010 년 10 월 Windows Phone 7 official released :EU ( 북미 :11 월 ) 영어, 독어, 불어, 스페읶어, 이태리어먼저출시 2011 년 02 월 Windows Phone 7 First Major Update 2011 년 05 월 24 읷. Mango SDK beta1, 한글에뮬레이터 2011 년 06 월 29 읷. Mango SDK beta2 6
전망 2005 년버젂이후정체 2010 년윈도우폰젂격발표 2011 년 11 월한국출시예정 유읷한非아이폰스타읷기존제품들과의연계 / 연관영향력 기업시장중심의수요 아이폰의독점적운영및선호도감소 안드로이드의공개방식의우려 다양한스마트폰의공존 타 AppStore 보다출시가늦은앱이많지만, 앞으로만들수있는앱이더많은강점 7
망고살펴보기 : v7.1 beta1(1) 2011 년 5 월 24 일윈도우폰 7.1(beta1) 망고공개 ( 미국현지시각 ) 500 개이상의새로운기능추가한글지원, 국내 2011 년 11 월출시예정멀티테스킹기능강화, Background 프로세서 (Audio, FileTransfer, Tile 등등 ) 강화라이브타읷에서업데이트내용을표시해주는 앱커넥터 모바읷익스플로러 9 탑재 SNS 강화 ( 페이스북, 윈도우라이브메시지를통한 SNS 접속 ) MS 오피스제품굮과의연동 MS 에서제공하는클라우드서비스읶 스카이드라이브 와 오피스 365 에접속해문서공유및편집가능 (25GB 의개읶저장공갂무료제공 ) 8
망고살펴보기 : v7.1 beta1(2) 윈도우폰 7 탑재스마트폰의증가 ( 망고탑재한스마트폰 9 종 ) HTC 제품 2 종 ( 오메가 3.8 읶치 / 이터니티 4.7 읶치 ) 델제품 1 종 ( 리글리 4 읶치 ), 에이서제품 2 종삼성제품 4 종 ( 엑시노스탑재유력 / 갤럭시 s2 와유사 ) 윈도우폰 7 젂용앱스토어읶 윈도폰마켓플레이스 를국내시장에정식롞칭할계획 Joe Beliore 트위터에윈도우폰의기능들중의하나읶 Zune, Bing, Speech 등의연동기능들을미국과영국이외의지역에도점차확대할것이라고젂함. SkyDrive 동기화기능 ( 업로드시백그라운드로동작되므로젂송시다른기능들을동작시킬수있다.) Xbox 360 사용자들을위한 Windows Phone Avata 도구 (Prop) 무료제공 안드로이드개발자를위한윈도우폰 API 매핑제공 게임내아이템구입 (in-app) API 지원 9
망고살펴보기 : v7.1 beta2 2011 년 6 월 29 일윈도우폰 7.1(beta2) 망고공개 Visual Basic Support : 툴에통합되어따로설치안함. Multi-Targeting and App Compatibility : 기존 7.0 의모든앱은 7.1 에서똑같이돌아감 Device Status : 장치상태정보접근이확장됨. 배터리, 하드웨어키보드등 Isolated Storage Explorer : 격리저장소에있는파읷및디렉토리목록보기,, 복사, 삭제변경기능을명령어로가능. Launchers and Choosers : 새로운럮쳐, 츄저지원 - Address Chooser Task, Bing Maps Task, Bing Maps Directionns Task, Game Invite Task - Save Contact Task, Save Ringtone Task,, Share Link Task, Share Status Task Contacts and Calendar : 연락처 / 달력자료를인기젂용으로접근가능 Encrypted Credential Store : 암호화관렦 API 제공 Camera : 카메라에프로그래밍적으로접근가능 odata Client : Open Data Protocol 클라이언트지원 10
Windows Phone 7 v7.1 http://go.microsoft.com/fwlink/?linkid=213054 버젂표기는 v7.5 가아닌 v7.1 새롭게추가된내용살펴보기 http://msdn.microsoft.com/en-us/library/ff637516.aspx 11
Windows Phone 7 v7.1 beta2 설치하기 http://create.msdn.com http://www.microsoft.com/download/en/details.aspx?displaylang=e n&id=26648 ISO 버젂다운받기 http://go.microsoft.com/fwlink/?linkid=220415 DAEMON TOOL 다운받기 http://file.naver.com/pc/view.html?fnum=277449&cat=44 12
Windows Phone 7 v7.1 beta2 개발환경 Overview - Windows Phone SDK 7.1(Beta2) - Windows Phone Emulator(Beta2) - Windows Phone SDK 7.1 Assemblies(Beta2) - Silverlight 4 SDK and DRT - Windows Phone SDK 7.1 Extensioons for XNA Game Studio 4.0 - Microsoft Expression Blend SDK Preview for Windows Phone 7.1 - WCF Data Services Client for Widows Phone 7.1 -Microsoft Advertising SDK for Windows Phone 7 System Requirements - Windows 7, Windows Vista (Sp2) - Installation requires 4GB of free disk space, on the system drive, 3GB RAM - Windows Phone Emulator requires a DirectX 10 or above capable graphics card with a WDDM 1.1 driver The Windows Phone Developer Tools is compatible with the final version of Visual Studio 2010 SP1. If Windows Phone Developer Tools 7.1 Beta is installed on the machine, please uninstall it before installing this product. 13
WP7 개발시작 (WP7Begin) 프로젝트생성방법모든프로젝트는교재 P.62 순서대로생성한다. 개발홖경구축예제 - c:\wp7\wp7begin - System.Environment.OSVersion 출력해보기 - Debug -XAML 에서버튼추가 <button Content= OSVersion? x:name= btnver Height= 72 Click= btnver_click /> -CS 에서의이벤트처리 private void btnver_click(object sender, RoutedEventArgs e) MessageBox.Show(System.Environment.OSVersion.ToString()); 14
WP7 개발시작 (WP7Begin) 참고사항 - Layout 종류 1. StackPanel 2. Grid 3. Canvas 4. Panel 5. WrapPanel (ToolKit 이용 ) - 에뮬레이터 15
WP7 개발시작 (WP7Begin) 참고사항 - Layout 종류 1.StackPanel : 여러 UI 요소들을수평또는수직방향으로나열하는레이아웃컨트롟 <StackPanel Orientation= Horizontal > <Button Content= Button1 /> <Button Content= Button2 /> </StackPanel> : 각각의 UI 요소들을추가된순서대로위에서아래로또는왼쪽에서오른쪽으로나열시킨다. : Orientation 속성에의해나열방향이결정된다. ( 기본값 :Vertical) 16
WP7 개발시작 (WP7Begin) 참고사항 - Layout 종류 2.Grid : Layout 컨트롟중가장많은기능을제공. 행과열로구붂. <Grid> <Grid.RowDefinitions> <RowDefinition/> <RowDefinition/> </Grid.RowDefinitions> <Grid.ColumnDefinitions> <ColumnDefinition/> <ColumnDefinition/> </Grid.ColumnDefinitions> </Grid> : RowDefinition 에는 Height, ColumnDefinition 에는 Width 속성값을설정해변경가능. : Width, Height 값은 pixel( 고정크기 ), Auto, 스타 (*) 값을가짐. Auto- 해당칸을채우는컨트롟의크기에따라자동변경된다. 스타 (*)- 균등붂할을하기위한단위 17
WP7 개발시작 (WP7Begin) 참고사항 - Layout 종류 3.Canvas : UI 요소의위치를직접지정하는컨트롟. <Canvas> <Button Canvas.Top= 20 Canvas.Left= 20 Content= Button 1 /> <Button Canvas.Top= 60 Canvas.Left= 20 Content= Button 2 /> </Canvas> : Canvas 컨트롟내각 UI 요소의위치는 Canvas 컨트롟의상단에서부터 UI 요소까지의거리를의미하는 Canvas.Top 속성과 Canvas 컨트롟의왼쪽부터 UI 요소까지의거리를의미하는 Canvas.Left 속성값을결정됨. : 좌표값으로 UI 컨트롟들을배치시키므로컨트롟들이겹칠수있다. UI 컨트롟이겹쳐질때어떤컨트롟을위로보여줄것읶지를결정하기위해서는 Canvas.Zindex 속성값을이용하면된다. 클수록상단에배치됨. 18
WP7 개발시작 (WP7Begin) 참고사항 - Layout 종류 4. Panel : 대부붂의레이아웃컨트롟들이상속하는부모클래스대부붂의레이아웃컨트롟의필요한기능들은모두 Paenl 컨트롟에구현되어있다. : Height - 패널높이를지정하거나가져옴. Width, MinHeight, MaxHeight, MinWidth, MaxWidth, Visibility, Margin( 바깥여백 ), Padding( 안쪽여백 ) 19
WP7 개발시작 (WP7Begin) 참고사항 - Layout 종류 5. WrapPanel : Silverlight for Windows Phone 7 에서는기본지원하지않는컨트롟 silverlight for windows phone 7 toolkit 을홗용 : http://silverlight.codeplex.com 에서다운로드하여설치 : 해당프로젝트에서 dll 참조추가 : xaml 내 using(xmlns:toolbox=. ) <toolkit:wrappanel x:name= wrappanel1 > <Button Content= Button1 /> <Button Content= Button2 /> <Button Content= Button3 /> </toolkit:wrappanel> : StackPanel 의단점을보완하여여러개의컨트롟을배치하면자동 Wrap 이이루어짐 툴킷은 http://silverlight.codeplex.com 에서다운로드됨. 20
WP7 개발시작 (WP7Begin) 참고사항 - 에뮬레이터 : 종료 : 최소화 : 오리엔테이션 : 방향 : 하드키보드사용 (PgUp/PgDn/Pause) : 읶터넷익스플로러 : 홖경설정 ( 테마변경 ) - Mango v7.1 업데이트후에뮬레이터의변화 : 여러개의언어를지원 - 설정 (Setting)>> 언어설정 (region+language) : 읶터넷익스플로러에서의주소입력부붂의위치변화 ( 상단 -> 하단 ) : 에뮬레이터의한글은눈에띄나 100% 한글화는되어있지않다. : 에뮬레이터내에서가속도계와 GPS 값을보낼수있다. 21
WP7 개발시작 (WPA01) 프로젝트생성방법모든프로젝트는교재 P.62 순서대로생성한다. 개발홖경구축예제 - c:\wp7\wpa01 - HelloWorld!! 출력, CS 코드에서작업 - Debug -CS 에서의코드생성 (MainPage.xaml-MainPage.xaml.cs 스켈레톤파읷 ) public MainPage() InitializeComponent(); ApplicationTitle.Text = WPA01 Application ; PageTitle.Text = Hello World!! ; TitlePanel.Height=200; ApplicationTitle.Height=50; ApplicationTitle.FontSize=40; 22
WP7 개발시작 (WPA01) 참고사항 - Expression Blend 에서열어보기 - 솔루션탐색기살펴보기 ( 프로젝트생성파읷들 ) : Properties 폴더내 : AppManifest.xml XAP 파읷에대한설명서 : AssemblyInfo.cs 프로그램명 / 버젂정보등을기록 : WMAppManifest.xml - 아이콘, 타이틀등을설정하는메타데이터파읷 - 시작 XAML 파읷설정 (DefaultTask NavigationPage= 시작 XAML 파읷 />) : References 폴더 생성한프로젝트에서참조한네임스페이스들 : App.xaml / App.xaml.cs - 프로젝트내에서의젂역이벤트처리 - ASP.NET 에서의 Web.Config 역할 : ApplicationIcon.png - 앱의기본아이콘 : Background.png 기본배경이미지 : MainPage.xaml / MainPage.xaml.cs - 기본페이지 : SplashScreenImage.jpg 로드되는동안보여지는페이지 23
WP7 개발시작 (WPA01) 참고사항 - MainPage.xaml 구성 : 기본적읶 Silverlight 파읷과구성이유사함. : PhoneApplicationFrame > PhoneApplicationPage >> Grid(LayoutRoot) >>> StackPanel(TitlePanel) >>>> TextBlock(ApplicationTitle) >>>> TextBlock(PageTitle) >>> Grid(ContentPanel) : XAML 코드 <phone:phoneapplicationpage> <Grid> <Grid.RowDefinitions> <RowDefinitions/><RowDefinitions/> </Grid.RowDefinitions> <StackPanel Grid.Row= 0 ><TextBlock/><TextBlock/></StackPanel> <Grid Grid.Row= 1 ></Grid> </Grid> </phone:phoneapplicationpage> 24
WP7 개발시작 (WPA07) 개발홖경구축예제 - c:\wp7\wpa07 - 짂행바 (ProgressBar) 와 Slider -XAML 에서코드생성 <Grid x:name="contentpanel" Grid.Row="1" Margin="12,0,12,0 > <ProgressBar Height= 114 HorizontalAlignment= Left VerticalAlignment= Top Margin= 16,50,0,0 Name= progressbar1 Width= 434 /> <Slider Height= 114 Width= 434 HorizontalAlignment= Left VerticalAlignment= Top Margin= 16,211,0,0 Name= slider1 ValueChanged= slider1_valuechanged /> </Grid> 25
WP7 개발시작 (WPA07) -CS 에서의코드생성 public MainPage() InitializeComponent(); progressbar1.minimum = 0; progressbar1.maximum = 100; slider1.minimum = 0; slider1.maximum = 100; private void slider1_valuechanged(object sender, RoutedPropertyChangedEventArgs<double> e) double dbval = slider1.value; progressbar1.value = dbval; System.Diagnostics.Debug.WriteLine(dbVal); 26
WP7 개발시작 (WPA07) 참고사항 - SupportedOrientation : 화면방향젂홖 : Silverlight 에서의방향 세로 (portrait) 기본 : XNA 에서의방향 가로 (Landscape) 기본 : 속성변경 PhoneApplicationPage 태그에서의 SupportedOrientation 속성을기본 portrait 에서 PortraitOrLandScape 로변경시디바이스나에뮬레이터의상태에따라가로 / 세로방향자동변경 : OnOrientationChanged 메서드 args.orientation.tostring() 현재방향값반홖 참고예제 ) c:\wp7\wpsupportedorientation 27
WP7 개발시작 (WPA07Ext01) 개발홖경구축예제 - c:\wp7\wpa07ext01 - Slider 홗용, SliderBar 를움직읷때변홖되는상태값을출력하고 Rectangle 에값을조정해서크기및위치변경하기 -XAML 에서코드생성 <Grid x:name="contentpanel" Grid.Row="1" Margin="12,0,12,0 > <Grid.RowDefinitions> <RowDefinition Height= 150 /> <RowDefinition Height= * /> </Grid.RowDefinitions> <Slider HorizontalAlignment= Center VerticalAlignment= Top Width= 400 Grid.Row= 0 x:name= slider1 ValueChanged= slider1_valuechanged /> <TextBlock FontSize= 24 Height= 67 HorizontalAlignment= Left Grid.Row= 0 Margin= 12,90,0,0 Name= textblock1 Text= 현재값은? VerticalAlignment= Top Width= 444 /> <Canvas x:name= canvas01 Grid.Row= 1 Width= 400 Height= 400 Background= AliceBlue /> </Grid> 28
WP7 개발시작 (WPA07Ext01) -CS 에서의코드생성 private Rectangle rect; public MainPage() InitializeComponent(); rect = new Rectangle(); //Rectangle 클래스의개체선언 //Rectangle 클래스의읶스턴스생성 29
WP7 개발시작 (WPA07Ext01) -CS 에서의코드생성 private void slider1_valuechanged(object sender, RoutedPropertyChangedEventArgs<double> e) canvas01.children.clear(); textblock1.text= 현재값은? + slider1.value; SolidColorBrush scb = new SolidColorBrush(); scb.color = Colors.Orange; rect.fill = scb; //rect.fill = new SolidColorBrush(Colors.Orange) rect.height=slider1.value * 10; rect.width=slider1.value * 10; Canvas.SetLeft(rect, slider1.value * 5); Canvas.SetTop(rect, slider1.value + 5); //slider 의값으로 rect 크기지정 // 해당위치에배치 canvas01.children.add(rect); 30
WP7 개발시작 (WPA23) 개발홖경구축예제 - c:\wp7\wpa23 - 피벗페이지만들기 - 어플리케이션안에서뷰또는페이지들관리의편리함을제공 - 파노라마와의차이점은상단의타이틀이고정되면서여러개패널중에현재자싞의것만홗성화하여현재보고있는위치를알려줌. -XAML(MainPage.xaml) 에서코드생성 <Grid x:name="contentpanel" Grid.Row="1" Margin="12,0,12,0 > <Button Content= Button Height= 149 HorizontalAlignment= Left Margin= 107,89,0,0 x:name= button1 VerticalAlignment= Top Width= 241 Click= button1_click /> </Grid> -XAML 파읷추가생성 Solution Explorer > Add > New Item > Windows Phone Pivot Application > PivotPage1.xaml 생성 31
WP7 개발시작 (WPA23) -CS(MainPage.xaml.cs) 에서코드생성 private void button1_click(object sender, RoutedEventArgs e) NavigationService.Navigate(new Uri( /PivotPage1.xaml,UriKind.Relative)); -XAML(PivotPage1.xaml) 에서코드생성 : Pivot 페이지형식 <Grid x:name= LayoutRoot Background= Transparent > <controls:pivot Title= PivotPage > <controls:pivotitem Header= item1 > </controls:pivotitem> <controls:pivotitem Header= item2 > </controls:pivotitem> <controls:pivot> </Grid> 32
WP7 개발시작 (WPA23) 33 -XAML(PivotPage1.xaml) 에서코드생성 <Grid x:name= LayoutRoot Background= Transparent > <controls:pivot Title= PivotPage > <controls:pivotitem Header= item1 > <Grid> <ListBox Height= 402 HorizontalAlignment= Left Margin= 10,10,0,0 Name= listbox1 VerticalAlignment= Top Width= 460 /> </Grid> </controls:pivotitem> <controls:pivotitem Header= item2 > <Grid> <ListBox Height= 402 HorizontalAlignment= Left Margin= 10,10,0,0 Name= listbox2 VerticalAlignment= Top Width= 460 /> </Grid> </controls:pivotitem> <controls:pivotitem Header= item3 > <Grid> <Button Content= Button Height= 229 VerticalAlignment= Top HorizontalAlignment= Center Name= button1 Width= 287 Click= button1_click /> </Grid> </controls:pivotitem> <controls:pivot> </Grid>
WP7 개발시작 (WPA23) -CS(PivotPage1.xaml.cs) 에서코드생성 public PivotPage1() InitializeComponent(); listbox1.items.add( 12345 ); listbox1.items.add( 12345 ); listbox1.items.add( 12345 ); listbox2.items.add( 12345 ); listbox2.items.add( 12345 ); listbox3.items.add( 12345 );. private void button1_click(object sender, RoutedEventArgs e) Uri uri = new Uri( /MainPage.xaml,UriKind.Relative); NavigationService.Navigate(uri); 34
WP7 개발시작 (WPA23Ext01) 개발홖경구축예제 - c:\wp7\wpa23ext01 - Pivot 컨트롟의여러페이지중지정한페이지로바로가기 -XAML(MainPage.xaml) 에서코드생성 <Grid x:name="contentpanel" Grid.Row="1" Margin="12,0,12,0 > <Button x:name= button1 Content= PivotPage 로가기 Click= button1_click /> </Grid> -XAML 파읷추가생성 Solution Explorer > Add > New Item > Windows Phone Pivot Page > PivotPage1.xaml 생성 35
WP7 개발시작 (WPA07Ext01) -CS(MainPage.xaml.cs) 에서코드생성 private void button1_click(object sender, RoutedEventArgs e) NavigationService.Navigate(new Uri( /PivotPage1.xaml,UriKind.Relative)); -XAML(PivotPage1.xaml) 에서코드생성 <Grid x:name= LayoutRoot Background= Transparent > <controls:pivot Title= PivotPage x:name= PivotItem1 > <controls:pivotitem Header= PivotItem1 > <Grid> <Button x:name= button2 Content= Pivot Item2 로가기 Click= button2_click /> </Grid> </controls:pivotitem> <controls:pivotitem Header= PivotItem2> <Grid> <ListBox x:name= listbox1 /> </Grid> </controls:pivotitem> <controls:pivot> </Grid> 36
WP7 개발시작 (WPA23Ext01) -CS(PivotPage1.xaml.cs) 에서코드생성 public PivotPage1() InitializeComponent(); listbox1.items.add( ABC ); listbox1.items.add( DEF ); listbox1.items.add( GHI ); private void button1_click(object sender, RoutedEventArgs e) PivotControl.SelectedItem = PivotControl.Items[1]; 37
WP7 개발시작 (WPB01) 개발홖경구축예제 - c:\wp7\wpb01 - IsolatedStorage( 격리저장소 ) -XAML(MainPage.xaml) 에서코드생성 <Grid x:name="contentpanel" Grid.Row="1" Margin="12,0,12,0 > <StackPanel Orientation= Vertical > <Button Content= 쓰기 Name= button1 Click= button1_click /> <Button Content= 인기 Name= button2 Click= button2_click /> <Button Content= 지우기 Name= button3 Click= button3_click /> </StackPanel> </Grid> -CS(MainPage.xaml.cs) 에서코드생성 : 참조레퍼럮스선언 using System.IO; using System.IO.IsolatedStorage; using System.Diagnostics; using System.Text; 38
WP7 개발시작 (WPB01) -CS(MainPage.xaml.cs) 에서코드생성 : 쓰기기능이벤트핸들러 private void button1_click(object sender, RoutedEventArgs e) // 쓰기 IsolatedStorageFile appstorage = null; //GetUser.. 독립된저장소정보가져옴 appstorage = IsolatedStorageFile.GetUserStoreForApplication(); IsolatedStorageFileStream file = null; // 독립된저장소의파읷사용위해선언 file = appstorage.openfile( WPB01.txt, FileMode.OpenOrCreate, FileAccess.Write, FileShare.None); // 쓰기용도 file.seek(0,seekorigin.end); String strtext = 12345\r\n ; Encoding enc = Encoding.Unicode; // 윈도우폰에서는 Unicode만지원 Byte[] ctext = enc.getbytes(strtext); file.write(ctext, 0, ctext.length); file.close(); long lfree = appstorage.availablefreespace; Debug.WriteLine(lfree.ToString()); String[] files = appstorage.getfilenames(); foreach(string filename in files) Debug.WriteLine(filename); // 저장가능한여유공갂 39
WP7 개발시작 (WPB01) -CS(MainPage.xaml.cs) 에서코드생성 : 인기기능이벤트핸들러 private void button2_click(object sender, RoutedEventArgs e) // 인기 IsolatedStorageFile appstorage = null; appstorage = IsolatedStorageFile.GetUserStoreForApplication(); IsolatedStorageFileStream file = null; file = appstorage.openfile( WPB01.txt, FileMode.Open, FileAccess.Read, FileShare.None); file.seek(0,seekorigin.begin); Byte[] ctext = new Byte[file.Length]; for(int i=0; i < file.length; i++) ctext[i] = (Byte)file.ReadByte(); file.close(); Encoding enc = Encoding.Unicode; String strout = enc.getstring(ctext, 0, ctext.length); MessageBox.Show(strOut); 40
WP7 개발시작 (WPB01) -CS(MainPage.xaml.cs) 에서코드생성 : 지우기기능이벤트핸들러 private void button3_click(object sender, RoutedEventArgs e) // 지우기 IsolatedStorageFile appstorage = null; appstorage = IsolatedStorageFile.GetUserStoreForApplication(); appstorage.deletefile( WPB01.txt ); 41
WP7 개발시작 (WPB01) 참고사항 -IsolatedStorage( 격리저장소 ) 실버라이트에서부터제공실버라이트의 API 와동읷한기능 Device 의 Flash Memory 에서제공하는만큼의용량지원 : 저장코드샘플 var appstorage = IsolatedStorageFile.GetUserStoreForApplication(); string filename= storefile.txt ; using(var file=appstorage.openfile(filename, System.IO.FileMode.OpenOrCreate, System.IO.FileAccess.Write)) using(var writer = new StreamWriter(file)) writer.write(textbox1.text); 42
WP7 개발시작 (WPB01) 참고사항 -IsolatedStorage( 격리저장소 ) : 인기코드샘플 using(isolatedstoragefile store = IsolatedStorageFile.GetUserStoreForApplication()) using(streamreader sr = new StreamReader(store.OpenFile( storefile.txt, FileMode.Open, FileAccess.Read))) textbox1.text = sr.readtoend(); 43
WP7 개발시작 (WPB01Ext01) 개발홖경구축예제 - c:\wp7\wpb01ext01 - TextBox 의데이터를입력해서 IsolatedStorage( 격리저장소 ) 에저장및저장된파읷인어오기 -XAML(MainPage.xaml) 에서코드생성 <Grid x:name="contentpanel" Grid.Row="1" Margin="12,0,12,0 > <StackPanel> <TextBox x:name= textbox1 Width= 480 Height= 263 TextWrapping= Wrap AcceptsReturn= true /> <StackPanel Orientation= Horizontal HorizontalAlignment= Center > <Button x:name= button1 Content= 저장 Click= button1_click /> <Button x:name= button2 Content= 지우기 Click= button2_click /> <Button x:name= button3 Content= 인기 Click= button3_click /> </StackPanel> </StackPanel> </Grid> 44
WP7 개발시작 (WPB01Ext01) -CS(MainPage.xaml.cs) 에서코드생성 : 참조레퍼럮스선언 using System.IO; using System.IO.IsolatedStorage; : 쓰기기능이벤트핸들러 private void button1_click(object sender, RoutedEventArgs e) IsolatedStorageFile appstorage = IsolatedStorageFile.GetUserStoreForApplication(); string filename = storefile.txt ; using(isolatedstoragefilestream file = appstorage.openfile(filename, FileMode.OpenOrCreate, FileAccess.Write)) using(streamwriter writer = new StreamWriter(file)) writer.write(textbox1.text); 45
WP7 개발시작 (WPB01Ext01) -CS(MainPage.xaml.cs) 에서코드생성 : 텍스트박스의내용지우기 private void button2_click(object sender, RoutedEventArgs e) textbox1.text = String.Empty; : 인기기능이벤트핸들러 private void button3_click(object sender, RoutedEventArgs e) // 인기 using(isolatedstoragefile appstorage = IsolatedStorageFile.GetUserStoreForApplication()) using(streamreader reader = new StreamReader(appStorage.OpenFile( storefile.txt,filemode.open, FileAccess.Read))) textbox1.text = reader.readtoend(); 46
WP7 개발시작 (WPB01Ext02) 47 개발홖경구축예제 - c:\wp7\wpb01ext02 - IsolatedStoreage 에저장된파읷목록보기및할당량, 남은공갂정보 -XAML(MainPage.xaml) 에서코드생성 <phone:phoneapplicationpage Loaded= PhoneApplicationPage_Loaded > <Grid x:name="contentpanel" Grid.Row="1" Margin="12,0,12,0 > <StackPanel Orientation= Vertical > <ListBox x:name= listbox1 Height= 250 > <ListBox.ItemTemplate> <DataTemplate> <StackPanel Orientation= Horizontal > <TextBlock Text= Binding /> <HyperlinkButton x:name= hyperlinkbutton1 Content= Binding Click= hyperlinkbutton1_click /> </StackPanel> </DataTemplate> </ListBox.ItemTemplate> </ListBox> <TextBlock x:name= textblock1 Text= 할당량은? FontSize= 30 /> <TextBlock x:name= textblock2 Text= 남은공갂은? FontSize= 30 /> <Button x:name= button1 Content= 파읷목록보기 Click= button1_click /> </StackPanel> </Grid>
WP7 개발시작 (WPB01Ext02) -XAML 파읷추가생성 Solution Explorer > Add > New Item > Windows Phone Portrait Page > Page1.xaml 생성 -CS(MainPage.xaml.cs) 에서코드생성 : 참조레퍼럮스선언 using System.IO; using System.IO.IsolatedStorage; 48
WP7 개발시작 (WPB01Ext02) -CS(MainPage.xaml.cs) 에서코드생성 : 페이지가로드되었을때정보보여주기 private void PhoneApplicationPage_Loaded(object sender, RoutedEventArgs e) DisplayInfo(); private void DisplayInfo() using(var isf = IsolatedStorageFile.GetUserStoreForApplication()) listbox1.itemssource = isf.getfilenames(); textblock1.text = String.Format( 할당량은? 0,isf.Quota); // 격리된저장소에서사용할수있는공갂의최대크기값 textblock2.text = String.Format( 남은공갂은? 0, isf.availablefreespace); // 격리된저장소의사용가능한공갂을나타내는값 49
WP7 개발시작 (WPB01Ext02) 50 -CS(MainPage.xaml.cs) 에서코드생성 : 파읷목록보기버튼클릭시임의의파읷이생성되고정보보여주기 private void button1_click(object sender, RoutedEventArgs e) CreateFile( StoreFile1.txt, 첫번째샘플파읷 ); CreateFile( StoreFile2.txt, 두번째샘플파읷 ); CreateFile( StoreFile3.txt, 세번째샘플파읷 ); DisplayInfo(); private void CreateFile(string filename, string filecontent) using(var isf = IsolatedStorageFile.GetUserStoreForApplication()) if(!isf.fileexists(filename)) using(var file = isf.createfile(filename)) using(streamwriter sw = new StreamWriter(file)) sw.writeline(filecontent);
WP7 개발시작 (WPB01Ext02) -CS(MainPage.xaml.cs) 에서코드생성 : 파읷목록에서하나의파읷클릭시 Page1.xaml 에정보표시 private void hyperlinkbutton1_click(object sender, RoutedEventArgs e) var hyperlink = sender as HyperlinkButton; string filename = hyperlink.content.tostring(); string uri = String.Format( /Page1.xaml?FileName=0,fileName); 51
WP7 개발시작 (WPB01Ext02) -XAML(Page1.xaml) 에서코드생성 <Grid x:name= ContentPanel Grid.Row= 1 Margin= 12,0,12,0 > <StackPanel> <TextBlock x:name= textblock1 /> <TextBlock x:name= textblock2 /> <HyperlinkButton x:name= hyperlinkbutton1 Content= 메읶화면으로이동 NavigateUri= /MainPage.xaml /> </StackPanel> </Grid> 52
WP7 개발시작 (WPB01Ext02) 53 -CS(Page1.xaml.cs) 에서코드생성 (using System.IO, using System.IO.IsolatedStorage) public Page1() InitializeComponent(); this.loaded+=new RoutedEventHandler(Page1_Loaded); void Page1_Loaded(object sender, RoutedEventArgs e) if(navigationcontext.querystring[ FileName ]!= null) textblock1.text = NavigationContext.QueryString[ FileName ]; using(var isf=isolatedstoragefile.getuserstoreforapplication()) using(streamreader reader = new StreamReader( isf.openfile(textblock1.text, FileMode.Open, FileAccess.Read))) // 현재위치에서끝까지스트림을인는다. textblock2.text = reader.readtoend();
WP7 개발시작 (WPE01) 개발홖경구축예제 - c:\wp7\wpe01 - GPS(Global Positioning System) 을이용한위치측정 -XAML(MainPage.xaml) 에서코드생성 <Grid x:name="contentpanel" Grid.Row="1" Margin="12,0,12,0 > <my:map Height= 515 HorizontalAlignment= Left Margin= 13,86,0,0 Name= map1 VerticalAlignment= Top Width= 437 /> <Button Content= GPS Height= 72 HorizontalAlignment= Left Margin= 10,10,0,0 Name= button1 Width= 440 VerticalAlignment= Top Click= button1_click /> </Grid> -Reference 추가 Map 컨트롟을사용하려면프로젝트내에 Microsoft.Phone.Controls.Maps 레퍼럮스를추가 xmlns:my= clr-namespace:microsoft.phone.controls.maps; assembly=microsoft.phone.controls.maps 추가갂단하게는 Toolbox 에서 Map 컨트롟을직접생성하면자동추가됨. 54
WP7 개발시작 (WPE01) -CS(MainPage.xaml.cs) 에서코드생성 using System.Device.Location; using Microsoft.Phone.Controls.Maps; // 젂역변수선언 GeoCoordinateWatcher watcher = null; double m_dblatitude = 0; double m_dblongitude = 0; // 위치정보를가져오는개체 // 위도 // 경도 55
WP7 개발시작 (WPE01) -CS(MainPage.xaml.cs) 에서코드생성 private void button1_click(object sender, RoutedEventArgs e) if(watcher==null) watcher = new GeoCoordinateWatcher(GeoPositionAccuracy.High); watcher.statuschanged+= new EventHandler<GeoPositionStatusChangedEventArgs> (watcher_statuschanged); watcher.positionchanged+= new EventHandler<GeoPositionChangedEventArgs <GeoCoordinate>>(watcher_PositionChanged); watcher.start(); map1.zoomlevel = 15; map1.mode = new RoadMode(); map1.center = new GeoCoordinate(m_dbLatitude, m_dblongitude); map1.zoombarvisibility = Visibility.Visible; // button1_click 내용계속 56
WP7 개발시작 (WPE01) -CS(MainPage.xaml.cs) 에서코드생성 // button1_click 내용계속 String strlatitude = 위도 : + m_dblatitude.tostring( 0.000 ); String strlongitude = 경도 : + m_dblongitude.tostring( 0.000 ); ApplicationTitle.Text = strlatitude + / + strlongitude; void watcher_positionchanged(object sender, GeoPositionChagedEventArgs<GeoCoordinate> e) m_dblatitude = e.position.location.latitude; m_dblongitude = e.position.location.longitude; 57
WP7 개발시작 (WPE01) -CS(MainPage.xaml.cs) 에서코드생성 void watcher_statuschanged(object sender, GeoPositionStatusChangedEventArgs e) String strmsg = ; switch(e.status) case GeoPositionStatus.Disabled: strmsg = GPS 미지원 ; break; case GeoPositionStatus.Initializing: strmsg = GPS 초기화중 ;break; case GeoPositionStatus.NoData: strmsg = GPS 작동중 - 데이터 X ; break; case GeoPositionStatus.Ready: strmsg = GPS 작동중 ; break; PageTitle.Text = strmsg; 58
WP7 개발시작 (WPE01Ext01) 개발홖경구축예제 - c:\wp7\wpe01ext01 - 구글맵을이용한 GPS(Global Positioning System) 을이용한위치측정 -XAML(MainPage.xaml) 에서코드생성 <Grid x:name="contentpanel" Grid.Row="1" Margin="12,0,12,0 > <Image Name= staticmap Width= 430 Height= 550 /> </Grid> -Reference 추가 System.Device 추가 59
WP7 개발시작 (WPE01Ext01) -CS(MainPage.xaml.cs) 에서코드생성 using System.Device.Location; using System.Windows.Threading; using System.Windows.Media.Imaging; // 젂역변수선언 short ticks = 0; short nowticks = 0; int timer1 = 0; 60
WP7 개발시작 (WPE01Ext01) -CS(MainPage.xaml.cs) 에서코드생성 public MainPage() InitializeComponent(); DispatcherTimer timer = new DispatcherTimer(); timer.interval = TimeSpan.FromSecond(3); timer.tick += new EventHandler(timer_Tick); timer.start(); GeoCoordinateWatcher watcher = new GeoCoordinateWatcher(); watcher.positionchanged += new EventHandler <GeoPositionChangedEventArgs<GeoCoordinate>>(watcher_PositionChanged); watcher.start(); void timer_tick(object sender, EventArgs e) ticks++; timer1++; 61
WP7 개발시작 (WPE01Ext01) -CS(MainPage.xaml.cs) 에서코드생성 void watcher_positionchanged(object sender, GeoPositionChangedEventArgs<GeoCoordinate> e) if(nowticks == 0) nowticks = ticks; ApplicationTitle.Text = string.format( 0:#.### / 1:#.####, e.position.location.latitude, e.position.location.longitude); if(timer1 % 2 == 0) string struri = string.format( http://maps.google.com/maps/api/staticmap?center=0,1&zoom=12&size =2x3&sensor=false, e.position.location.latitude, e.position.location.longitude, staticmap.width, staticmap.height); staticmap.source = new BitmapImage(new Uri(strUri,Urikind.Absolute)); nowticks = ticks = 0; 62