블로그 이미지
평범하게 살고 싶은 월급쟁이 기술적인 토론 환영합니다.같이 이야기 하고 싶으시면 부담 말고 연락주세요:이메일-bwcho75골뱅이지메일 닷컴. 조대협


Archive»


 

'윈도우즈폰7'에 해당되는 글 2

  1. 2010.08.12 Windows Phone 7의 데이타 저장구조-Isolated Storage 리뷰 (2)
  2. 2010.08.12 Windows Phone 7의 위치정보(LBS) API 분석 (1)
 

모든 프로그래밍 언어가 그렇듯이 데이타를 저장할 수 있는 저장소가 필요하다.
보통 파일이나 DBMS가 가장 통상적인 방법인데
안타깝게도....!! 윈폰7에서는 Embedded DBMS를 지원안한다. WM6.5까지는 기본 내장이었는데.. 윈폰7에서는 빠졌다. 이유인 즉슨.. 클라우드를 쓰라는 것. SQL Azure 클라우드도 있으니 사용해도 되긴 하는데.. 그래도.. 로컬 구동 앱에서는 DBMS가 편한건 사실이다.. (오픈소스로 제공되는 DBMS가 있으니 나중에 한번 소개해보기로 하고)

윈폰7의 Persistance 저장구조는 파일 시스템이다.
디렉토리를 생성하고, 각 디렉토리에 파일을 저장하는 방식이다.

그리고 또 하나가 Local Setting이라는 것이 있는데, 이건, 간단하게 말하면 애플리케이션의 Config(설정 정보)를 저장하는 공간으로 마치 HashTable처럼 Key,Value로 이루어져 있다.

실제 코드 예제를 보면

간단하다. 디렉토리 만들고, StreamWrite 이용해서 파일 열고, WriteLine으로 쓰고 Close로 닫는다.
자바나 닷넷 코드와 크게 다르지 않다.

아!! 여기서 하나 꼭 기억해야 할것. 이 파일들은 해당 애플리케이션에서만 사용이 가능하다. Isolated 라고 하는 속성인데, 보안적인 문제로 다른 애플리케이션이 함부로 파일을 교차해서 접근할 수 없도록 막는다.
여기에 더해서 애플리케이션별로 Quota (허용 용량) 제한이 없다.

요즘 스마트폰은 기본 요소가 GPS 기반의 위치 정보를 제공함으로써, LBS (Location Based Service)를 제공하게 하는건데, 당근 윈폰7도 API를 제공한다. 그런데 약간 특이한데, 일단 한번 살펴보자


GPS뿐만 아니라, cellphone과 radio를 지원

GeoCoordinateWatcher watcher = new GeoCoordinateWatcher(GeoPositionAccuracy.Low);

위치 정보를 가지고 오는 Class는 위와 같다. GeoGoodinateWatcher를 사용하는데, 재미있는것중 하나가 안에 생성자에 들어가는 GeoPostionAccuracy.Low와 High라는 값이다.
윈폰7의 기기 요건은 GPS 필수 장착과 라디오 필수 장착 요건이 있다.
GPS를 이용한 위치 추적은 정확도는 높으나 기본적으로 배터리 소모가 높다. 반대로 전화 기지국을 통한 위치 추적이나, 라디오를 이용한(이건 원리를 아직 잘 모르겠는데.) 위치 추적은 정확도는 낮지만 전력 소모량이 낮다.
윈폰7에서는 이걸 용도에 맞게 선택해준다는 말씀, Low로 설정하면 라디오나 기지국 기반의 위치 추적을, High는 GPS기반의 위치 추적을 이용한다.

이동시에 위치 변화 감지 방법
윈도우 플랫폼 답게 현재 위치가 변하는 것에 대해서는 이벤트를 발생 시켜서 이벤트 핸들러에서 처리하게 한다. 이때, 위치가 변하는 기준(즉 원래 위치에서 얼마나 움직였을때 위치가 변화한것으로 판단하냐)를 MovementThreadHold로 설정할 수 있다.

위의 예제는 20m로 설정한 예이다.
실제 개발자 가이드에서도 보면 MovementThreshold를 20m 이상으로 설정하게 되어 있다. GPS 자체가 노이즈에 민감하게 반응하고, 더군다나 외장 GPS 안테나를 가지고 있지 않기 때문에, 20m 가 적정값이라는 거다.. (3~4m 내외로 정확하면 좋겠다는 아쉬움이)
 

위치가 바뀌었을때, 이벤트를 받아서 처리하는 함수는 위와 같이 PostionChanged에 EventHandler를 지정해주면 된다. StatusChanged 이벤트는 GPS의 상태가 바뀌었을때, 예를 들어 수신 불능 상태, 수신 가능 상태, 준비중 등 일때 사용할 수 있다.

아마다 MovementThreshold의 값은 하드웨어 제조사의 GPS 감도에 따라서 차이가 있을 수 있을것 같고, 사실 흥미로운 것은 GPS가 불가능한 지역이나 날씨에서도 기지국이나 특히 라디오를 이용해서 위치 정보를 추적할 수 있다는 것이다.