모다의 윈도우폰7 뚝딱 팩토리(12)-카메라와 앨범 연동하기
한국마이크로소프트에서 초급 스마트폰 개발자 분들을 위해 공개하는 모다의 윈도우폰7 뚝딱 팩토리 열두번째 영상!
윈도우폰에서는 각 기능들에 대해 접근을 엄격하게 제한하고 있지만, 몇 가지 기능들에 대해 예외를 적용하고 있습니다. 바로 사진, 주소록 등의 데이터에 접근하는 기능인데요 이 기능들과 어플리케이션이 연동되기 때문에 훨씬 멋지고 편리한 기능이 만들어 질 수 있답니다.
하지만 개인정보들이 담긴 데이터의 접근은 신중해야 합니다. 함부로 개인데이터를 조회하고 유출하지 못하도록 윈도우폰의 개발환경에서는 이에 접근할 때 사용하는 Launchers & Choosers 라는 것이 있습니다. 이 기술은 어플리케이션에서 활용할 데이터를 선택함에 있어 사용자가 결정권을 쥐게 되고 그만큼 의도하지 않은 개인정보 사용을 피할 수 있는, 두 마리 토끼를 모두 잡은 기술이지요.
참고로 이 기술들을 활용한 어플리케이션을 조작할 때는 주로 실제 폰에서 테스트를 하게 되는데요, 사진이나 미디어 등의 자료에 접근 할 경우 디버거에서 오류가 나는 경우가 종종 발생합니다. 그 이유는 싱크 프로그램인 Zune 소프트웨어가 폰의 미디어 관련 자료들의 접근을 제한하기 때문이죠. 따라서 Zune 소프트웨어가 동작하지 않는 상태에서 디버깅 할 수 있는 방법을 찾으셔야 하는데요, Windows Phone Connect Tool이 이런 문제들을 해결해 주고 있습니다. 어떻게 디버깅 하는지 한번 살펴볼까요?
이번 영상에서는 chooser를 이용해 카메라와 앨범기능을 사용하는 예제와 함께, Connect Tool을 이용해 디버깅 하는 방법도 알려드립니다!
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 Microsoft.Phone;
15: using Microsoft.Phone.Tasks;
16:
17: namespace CameraApp
18: {
19: public partial class MainPage : PhoneApplicationPage
20: {
21: CameraCaptureTask camTask;
22: PhotoChooserTask photoTask;
23:
24: // Constructor
25: public MainPage()
26: {
27: InitializeComponent();
28: camTask = new CameraCaptureTask();
29: photoTask = new PhotoChooserTask();
30:
31: camTask.Completed += new EventHandler<PhotoResult>(imageTask_Completed);
32: photoTask.Completed +=new EventHandler<PhotoResult>(imageTask_Completed);
33: }
34:
35: void imageTask_Completed(object sender, PhotoResult e)
36: {
37: // throw new NotImplementedException();
38: image1.Source = PictureDecoder.DecodeJpeg(e.ChosenPhoto); // 이미지 처리
39: textBlock1.Text = e.OriginalFileName;
40: }
41:
42: private void button1_Click(object sender, RoutedEventArgs e)
43: {
44: camTask.Show();
45: }
46:
47: private void button2_Click(object sender, RoutedEventArgs e)
48: {
49: photoTask.Show();
50: }
51: }
52: }