Korea Evangelist

Developer & Platform Evangelism, Microsoft Korea

February, 2011

  • Korea Evangelist

    모다의 윈도우폰7 뚝딱 팩토리(9)-위치기반 어플리케이션의 기초

    • 0 Comments

     

    한국마이크로소프트에서 초급 스마트폰 개발자 분들을 위해 공개하는 모다의 윈도우폰7 뚝딱 팩토리 아홉번째 영상!

     

    스마트폰 어플리케이션에서 활용할 수 있는 강력한 기능중의 하나는 바로 자신의 위치를 활용할 수 있다는 것이죠. 현재 자신의 위치를 측정해서 맞춤형 서비스를 제공할 수 있습니다. 대표적인 기능이 바로 주변 맛집/관광지 찾기, 지도관련 어플리케이션 기능들이고, 지금도 많은 위치기반 어플리케이션들이 등록되고 있지요.

    윈도우폰에서는 하드웨어 표준안의 제정으로 모든 윈도우폰에 A-GPS가 탑재되도록 하였습니다. 그리고 이것을 활용할 수 있는 API와 개발환경을 제공하고 있으며 이번 영상에서는 어떻게 GPS 모듈을 활용하여 지금의 위치를 측정할 수 있는지 알아봅니다.

    특히 GPS를 활용함에 있어서, GPS 기능활용 자체 외에도 몇 가지 추가적으로 고려해야 할 사항들이 있는데요, 먼저 UI스레드/non-UI스래드간의 연동을 들 수 있습니다.  일반적으로 GPS모듈을 사용할 때 이벤트 핸들러/델리게이트를 사용하는 관계로 non-UI 스래드에서 사용하게 되는데요, Non-UI 스래드와 UI스래드간의 연동을 위해 Dispatcher.BeginInvoke()라는 메서드를 사용합니다.

    또한 전력사용에 민감한 스마트폰의 특성항 배터리가 빨리 소모되는 문제를 해결하기 위해 항상 모듈의 작동/유후상태를 잘 컨트롤 해 주셔야 어플리케이션의 품질을 높일 수 있지요. 이러한 내용들을 영상에서 다루고 있으며, GPS 모듈을 사용할 때 고려해야 할 것들을 안내해 둔 문서가 MSDN에 있습니다.

     

    위치를 측정하고 활용하는 것은 유용한 기능이긴 하지만 윈도우폰 SDK에서 제공되는 에뮬레이터에는 GPS를 테스트 할 수 있는 기능이 포함되어있지 않습니다. 따라서 위치기반 어플리케이션을 테스팅 하려면 개발자 등록이 되어있는  실제 디바이스를 사용하셔야 하는데요, 현재 우리나라에서는 개발자 등록이 가능하지 않습니다. 추후에 개발자 등록 사이트에 한국 개발자 등록이 오픈 될 예정이니 잠시만 기다려주세요! 이번 영상에서는 아쉬워하시는 분들의 갈증을 조금이라도 해소 해 드리고자, 실제 개발자 등록이 된 윈도우폰 위에서 테스트하는 장면도 보여드립니다.

     

       1:  using System;
       2:  using System.Collections.Generic;
       3:  using System.Linq;
       4:  using System.Net;
       5:  using System.Windows;
       6:  using System.Windows.Controls;
       7:  using System.Windows.Documents;
       8:  using System.Windows.Input;
       9:  using System.Windows.Media;
      10:  using System.Windows.Media.Animation;
      11:  using System.Windows.Shapes;
      12:  using Microsoft.Phone.Controls;
      13:   
      14:  using System.Device.Location;
      15:   
      16:  namespace LocationAware01
      17:  {
      18:      public partial class MainPage : PhoneApplicationPage
      19:      {
      20:          GeoCoordinateWatcher watcher;
      21:   
      22:          // Constructor
      23:          public MainPage()
      24:          {
      25:              InitializeComponent();
      26:   
      27:              // GPS init
      28:              watcher = new GeoCoordinateWatcher();
      29:              watcher.MovementThreshold = 20;
      30:              watcher.PositionChanged += new EventHandler<GeoPositionChangedEventArgs<GeoCoordinate>>(watcher_PositionChanged);
      31:          }
      32:   
      33:          void watcher_PositionChanged(object sender, GeoPositionChangedEventArgs<GeoCoordinate> e)
      34:          {
      35:              //throw new NotImplementedException();
      36:              // non-UI thread 에서 실행되므로 UI thread 와의 연동을 위해 Dispatcher를 사용
      37:              Deployment.Current.Dispatcher.BeginInvoke(() => MyPositionChanged(e));
      38:          }
      39:   
      40:          void MyPositionChanged(GeoPositionChangedEventArgs<GeoCoordinate> e)
      41:          {
      42:              // throw new NotImplementedException();
      43:              textBox1.Text = e.Position.Location.Latitude.ToString("0,000");
      44:              textBox2.Text = e.Position.Location.Longitude.ToString("0,000");
      45:   
      46:              watcher.Stop(); // for battery issue
      47:          }
      48:   
      49:          private void button1_Click(object sender, RoutedEventArgs e)
      50:          {
      51:              watcher.Start();
      52:          }
      53:      }
      54:  }

     

  • Korea Evangelist

    모다의 윈도우폰7 뚝딱 팩토리(8)-웹브라우저 사용하기

    • 0 Comments

     

    한국마이크로소프트에서 초급 스마트폰 개발자 분들을 위해 공개하는 모다의 윈도우폰7 뚝딱 팩토리 여덟번째 영상!

     

    이번 시간은 웹 브라우저 사용법에 대해서 알아보는 시간입니다. 윈도우 폰에서 웹 브라우저를 사용할 수 있는 방법은 두 가지가 있는데요, 직접 모바일 익스플로러를 런칭하는 방법과, 직접 어플리케이션 안에 넣는(Embedded)방식이 있습니다.

     

    특히 Embedded 방식의 경우 여러 가지 핸들링이 가능한데요, 웹에 있는 데이터를 직접 로드하는 일반적인 방식도 지원하는 것은 당연하고, 미리 저장되어있거나 어플리케이션 실행중에 만들어지는 HTML 코드를 불러오는 것도 가능합니다. 그리고 직접적으로 웹브라우저를 연동하는것은 아니지만, 자바스크립트와 연동해서 어플리케이션을 만드는 것도 가능하지요.

    하지만 웹 브라우저를 이용해 어플리케이션을 만드는 경우 보안과 관련된 요소들을 주의하셔야 합니다, MSDN에는 이와 관련해 보안 가이드라인이 있으니 실제 어플리케이션을 개발하실 때 꼭 참조해주시기 바랍니다.

    이번 영상에서는 웹 브라우저 기능을 이용한 다양한 예제와 코딩들을 선보입니다. 소스코드도 아래 첨부하니 많은 도움 되시길 바래요^^

     

     

       1:  using System;
       2:  using System.Collections.Generic;
       3:  using System.Linq;
       4:  using System.Net;
       5:  using System.Windows;
       6:  using System.Windows.Controls;
       7:  using System.Windows.Documents;
       8:  using System.Windows.Input;
       9:  using System.Windows.Media;
      10:  using System.Windows.Media.Animation;
      11:  using System.Windows.Shapes;
      12:  using Microsoft.Phone.Controls;
      13:  using Microsoft.Phone.Tasks;
      14:   
      15:  namespace WebBrowserApplicaiton
      16:  {
      17:      public partial class MainPage : PhoneApplicationPage
      18:      {
      19:          // Constructor
      20:          public MainPage()
      21:          {
      22:              InitializeComponent();
      23:          }
      24:   
      25:          private void button1_Click(object sender, RoutedEventArgs e)
      26:          {
      27:              webBrowser1.Navigate(new Uri(textBox1.Text));
      28:          }
      29:   
      30:          private void button2_Click(object sender, RoutedEventArgs e)
      31:          {
      32:              string myHtml = null;
      33:              myHtml += "<html>";
      34:              myHtml += "     <body>";
      35:              myHtml += "         <h1>Hello MODA</h1>";
      36:              myHtml += "     </body>"; 
      37:              myHtml += "</html>";
      38:   
      39:              webBrowser1.NavigateToString(myHtml);
      40:          }
      41:   
      42:          private void button3_Click(object sender, RoutedEventArgs e)
      43:          {
      44:              WebBrowserTask myExplorer = new WebBrowserTask();
      45:              myExplorer.URL = "http://facebook.com/WindowsPhoneKorea";
      46:              myExplorer.Show();
      47:          }
      48:      }
      49:  }

     

  • Korea Evangelist

    모다의 윈도우폰7 뚝딱 팩토리(7)-메뉴 구현하기

    • 0 Comments

     

     

    한국마이크로소프트에서 초급 스마트폰 개발자 분들을 위해 공개하는 모다의 윈도우폰7 뚝딱 팩토리 일곱번째 영상!

     

    기존의 윈도우 어플리케이션에서는 “메뉴 바” / “툴바” 라는 UI를 통해서 각 기능이나 페이지로 넘어갈 수 있었는데요, 윈도우폰에서는 스마트폰 디바이스에 맞도록 고유한 UI를 설계하여 쉽고 편하게 넘어갈 수 있도록 제공하는 것이 바로 “어플리케이션 바”입니다.

    화면 아래 작은 아이콘과 슬라이드 업 메뉴들로 구성되어 있는 이 UI는 ApplicationBar  클래스를 통해 생성하고 아이콘과 아이콘 설명, 그리고 텍스트 메뉴아이템을 추가할 수 있습니다.

     

    참고로 기본 아이콘 패키지는 C:\Program Files\Microsoft SDKs\Windows Phone\v7.0\Icons\dark 폴더에 기본적으로 설치되어있습니다. (Program Files (x86) 폴더 아래 설치되어있는 경우도 있습니다)

     

       1:          public MainPage()
       2:          {
       3:              InitializeComponent();
       4:              ApplicationBar = new ApplicationBar();
       5:              ApplicationBarIconButton button1 = new ApplicationBarIconButton(new Uri("/icons/icon.png", UriKind.Relative));
       6:              button1.Text = "Sample Icon";
       7:              ApplicationBar.Buttons.Add(button1);
       8:   
       9:              button1.Click += new EventHandler(button1_Click);
      10:   
      11:              ApplicationBarMenuItem menuItem1 = new ApplicationBarMenuItem("Toggle Bar Opacity");
      12:              ApplicationBar.MenuItems.Add(menuItem1);
      13:   
      14:              menuItem1.Click += new EventHandler(menuItem1_Click);
      15:          }
      16:   
      17:          void menuItem1_Click(object sender, EventArgs e)
      18:          {
      19:              // throw new NotImplementedException();
      20:              if (ApplicationBar.Opacity == .5)
      21:                  ApplicationBar.Opacity = 1;
      22:              else
      23:                  ApplicationBar.Opacity = .5;
      24:          }
      25:   
      26:          void button1_Click(object sender, EventArgs e)
      27:          {
      28:              // throw new NotImplementedException();
      29:              ContentPanel.Background = new SolidColorBrush(Colors.White);
      30:          }

     

  • Korea Evangelist

    모다의 윈도우폰7 뚝딱 팩토리(6)-윈도우폰의 저장소

    • 0 Comments

     

     

    한국마이크로소프트에서 초급 스마트폰 개발자 분들을 위해 공개하는 모다의 윈도우폰7 뚝딱 팩토리 여섯번째 영상!

     

    윈도우폰의 저장소는 일반적인 PC 환경의 저장소와 조금 다른 형태를 띄고 있습니다. “격리된 저장소”라고 불리는 이 곳은 어플리케이션 상호간 데이터 접근이 엄격하게 제한되어있습니다. 자신이 가진 저장소만 접근할 수 있고, 남의 저장소에 가서 파일을 열람하거나 변경하는 것이 불가능한 구조입니다.

     

    AP_Con_IStorage2

    (From MSDN Library)

     

    기존의 윈도우 어플리케이션에서 파일 핸들링 하는 것과 유사한 부분이 많아서 기존에 파일시스템 관련 프로그래밍을 해 보신 분들은 쉽게 따라하실 수 있는 구조이며, 처음에 공간할당을 받는 부분만 주의 해 주시면 됩니다.

     

    격��된 저장소에 대해 조금 더 자세하게 알고 싶으신 분들은 MSDN라이브러리의 IsolatedStorage Overview를 참고해 주시기 바랍니다!

     

    격리된 저장소에 파일 저장하고 읽기

       1:  using System;
       2:  using System.Collections.Generic;
       3:  using System.Linq;
       4:  using System.Net;
       5:  using System.Windows;
       6:  using System.Windows.Controls;
       7:  using System.Windows.Documents;
       8:  using System.Windows.Input;
       9:  using System.Windows.Media;
      10:  using System.Windows.Media.Animation;
      11:  using System.Windows.Shapes;
      12:  using Microsoft.Phone.Controls;
      13:   
      14:  using System.IO;
      15:  using System.IO.IsolatedStorage;
      16:   
      17:  namespace isoStorage1
      18:  {
      19:      public partial class MainPage : PhoneApplicationPage
      20:      {
      21:          // Constructor
      22:          public MainPage()
      23:          {
      24:              InitializeComponent();
      25:          }
      26:   
      27:          private void button1_Click(object sender, RoutedEventArgs e)
      28:          {
      29:              using (IsolatedStorageFile isf = IsolatedStorageFile.GetUserStoreForApplication())
      30:              {
      31:                  isf.CreateDirectory("Moda");
      32:                  IsolatedStorageFileStream isfStream = new IsolatedStorageFileStream("Moda\\comment.txt", FileMode.Create, isf);
      33:                  StreamWriter writer = new StreamWriter(isfStream);
      34:   
      35:                  writer.WriteLine(textBoxSave.Text);
      36:                  writer.Close();
      37:                  isfStream.Close();
      38:              }
      39:   
      40:          }
      41:   
      42:          private void button2_Click(object sender, RoutedEventArgs e)
      43:          {
      44:              using (IsolatedStorageFile isf = IsolatedStorageFile.GetUserStoreForApplication())
      45:              {
      46:                  IsolatedStorageFileStream isfStream = 
      47:                      new IsolatedStorageFileStream("Moda\\comment.txt", FileMode.Open, isf);
      48:                  try
      49:                  {
      50:                      StreamReader reader = new StreamReader(isfStream);
      51:                      textBlockLoad.Text = reader.ReadToEnd();
      52:                      reader.Close();
      53:                      isfStream.Close();
      54:                  }
      55:                  catch
      56:                  {
      57:                      MessageBox.Show("error");
      58:                  }
      59:              }
      60:   
      61:          }
      62:      }
      63:  }

     

    격리된 저장소에 설정값 저장하고 읽기

       1:  using System;
       2:  using System.Collections.Generic;
       3:  using System.Linq;
       4:  using System.Net;
       5:  using System.Windows;
       6:  using System.Windows.Controls;
       7:  using System.Windows.Documents;
       8:  using System.Windows.Input;
       9:  using System.Windows.Media;
      10:  using System.Windows.Media.Animation;
      11:  using System.Windows.Shapes;
      12:  using Microsoft.Phone.Controls;
      13:   
      14:  using System.IO;
      15:  using System.IO.IsolatedStorage;
      16:   
      17:  namespace isoStorage2
      18:  {
      19:      public partial class MainPage : PhoneApplicationPage
      20:      {
      21:          // Constructor
      22:          public MainPage()
      23:          {
      24:              InitializeComponent();
      25:          }
      26:   
      27:          private void button1_Click(object sender, RoutedEventArgs e)
      28:          {
      29:              IsolatedStorageSettings iss = IsolatedStorageSettings.ApplicationSettings;
      30:              iss.Add("WP7", "COOL");
      31:              iss.Save();
      32:              MessageBox.Show("Saved");
      33:          }
      34:   
      35:          private void button2_Click(object sender, RoutedEventArgs e)
      36:          {
      37:              IsolatedStorageSettings iss = IsolatedStorageSettings.ApplicationSettings;
      38:              string settingsText;
      39:   
      40:              try
      41:              {
      42:                  iss.TryGetValue("WP7", out settingsText);
      43:                  textBlock1.Text = settingsText;
      44:              }
      45:              catch
      46:              {
      47:                  MessageBox.Show("error");
      48:              }
      49:          }
      50:      }
      51:  }

     

     

  • Korea Evangelist

    모다의 윈도우폰7 뚝딱 팩토리(5)-데이터 연동하고 리스트 출력하기

    • 0 Comments
    모다의 윈도우폰7 뚝딱 팩토리(5)-데이터 연동하고 리스트 만들기

     

    한국마이크로소프트에서 초급 스마트폰 개발자 분들을 위해 공개하는 모다의 윈도우폰7 뚝딱 팩토리 다섯번째 영상!

    폰에 저장되어있는 데이터들을 활용하여 리스트를 표시하고 리스트를 출력할 경우 해당 메뉴에 대한 자세한 내용이 표시되도록 하는 예를 보여드립니다.

    이번 예제는 대부분의 작업이 소스코드 수정이 아닌 디자이너에서 이루어지므로 별도의 소스코드는 없으며 조금 더 고급 프로그래밍에 대한 예제를 찾으시면 MSDN 라이브러리의 MVVM패턴 어플리케이션 만들기를 참고하세요 미소

     

Page 3 of 4 (17 items) 1234