20140122 techdays mini 앱 개발 세미나(3) - 센서활용 앱 개발

738 views
564 views

Published on

위치 정보와 각종 센서를 이용하는 앱을 통해서 LBS(Location Base Service)와 더불어 상황인지에 한 걸음 더 접근하는 방법을 예제와 함께 공개합니다. 위도우에서 제공하는 다양한 위치정보와 센서 관련 API에 주목하십시오.

Published in: Technology
0 Comments
1 Like
Statistics
Notes
  • Be the first to comment

No Downloads
Views
Total views
738
On SlideShare
0
From Embeds
0
Number of Embeds
3
Actions
Shares
0
Downloads
0
Comments
0
Likes
1
Embeds 0
No embeds

No notes for slide
  • The 9-axis system is standard equipment in Windows 8 tablets (designed and certified) .. Accelerometer == acceleration due to gravity.. Gyro == rotational speeds around x,y,z of the device.. Magnetometer == magenetic field strenghts.. Pass-through data is easy.. Hardware accelerometer data is given to you via an accelerometer API.. The interesting magic happens when we get to sensor fusion.. Compass is a tilt-compensated compass you can use to always know where north is.. Inclinomenter = yaw pitch and raw.. Representing device orientation in 3D space.. DeviceOrientation exposes rotation matrix data..
  • The 9-axis system is standard equipment in Windows 8 tablets (designed and certified) .. Accelerometer == acceleration due to gravity.. Gyro == rotational speeds around x,y,z of the device.. Magnetometer == magenetic field strenghts.. Pass-through data is easy.. Hardware accelerometer data is given to you via an accelerometer API.. The interesting magic happens when we get to sensor fusion.. Compass is a tilt-compensated compass you can use to always know where north is.. Inclinomenter = yaw pitch and raw.. Representing device orientation in 3D space.. DeviceOrientation exposes rotation matrix data..
  • 20140122 techdays mini 앱 개발 세미나(3) - 센서활용 앱 개발

    1. 1. 1월의 주제 2014년 새해 명품 특강! 센서 활용 앱 개발 204년 1월 22일 한국마이크로소프트 11층
    2. 2. 2014년 1월 새해 명품 특강! 센서 활용 앱 개발 Notice <테크데이즈 미니 앱개발 세미나 웹페이지> 앱 개발자를 위한 시리즈 세미나 <테크데이즈 미니 토요세미나 웹페이지> 개발&기술 내용을 심도있게 전달하는 시리즈 세미나 http://aka.ms/techdaysminiappdev • 지난 세션 자료 열람 • 2월, 3월 세미나 사전등록 http://aka.ms/techdaysminisat • 지난 세션 자료 열람(Visual Studio 2013, C#) • 1월 25일 <ASP.NET, 서비스 플랫폼으로 날다!> 사전등록
    3. 3. 2014년 1월 새해 명품 특강! 센서 활용 앱 개발 겨울계절학기 윈도우 8.1 스토어 앱개발 족집게 특강! - 휴즈플로우 이길복 CTO
    4. 4. 2014년 1월 새해 명품 특강! 센서 활용 앱 개발 경품추첨 마이크로소프트 웨지 모바일 키보드 스컬프트 컴포트 마우스 Notice • 행사 종료 후 설문지를 작성하여 등록 데스크에 제출해 주세요. 소정의 기념품을 드립니다.
    5. 5. 2014년 1월 새해 명품 특강! 센서 활용 앱 개발 센서와 위치정보를 이용한 LBS(Location Base Service) 만들 기 - 한국마이크로소프트 김영욱 에반젤리스트
    6. 6. •Lenovo Miix 2 8 - 32GB •2-cell lithium-polymer battery •Microsoft Office Home and Student Edition •Owner's manual •Dell Venue 8 Pro •Up to 10 Hours battery life time •Intel Bay Trail –T
    7. 7. •Intel® Atom™ Processor Z2760 (DC/4T, 1.8Ghz Burst, •Intel Baytrail Z3740 1.5Ghz HFM, 600Mhz LFM) •LED-Backlit LCD •10.1" (16:9`) HD WXGA (1366x768), Multitouch IPS •RAM 2048 MB •Intel HD GMA ,64GB, WiFi, Digitizer & Pen •Flash 32 GB •Battery capacity 17.5 (Wh) •2GB LPDDR2, 2-cell Li-Polymer Battery, 30 Wh •Size (w/h/d mm) 135/218/10.8 mm •Accelerometer •GPS/E-Compass
    8. 8. 우리 인텔이 달라 졌어요!
    9. 9. 국내 지도 서비스 다양한 웹 기반 API 제공 Javascript classes
    10. 10. http://dna.daum.net
    11. 11. 검색 API Key 신청
    12. 12. <!DOCTYPE html> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> <title>Daum 지도 API v3 예제: 기본 지도 생성하기</title> <script type="text/javascript" src="http://apis.daum.net/maps/maps3.js?apikey=DAUM_MAPS_DEMO_APIKEY" char set="utf-8"></script> <script type="text/javascript"> var map; function init() { map = new daum.maps.Map(document.getElementById('map'), { center: new daum.maps.LatLng(37.537123, 127.005523), level: 3 }); } </script> </head> <body onload="init()"> <div id="map" style="width:600px;height:400px;"></div> </body> </html>
    13. 13. function moving(latitude, longitude){ map.panTo(new daum.maps.LatLng(latitude, longitude)); } function zoomIn() { var level = map.getLevel(); if(level != 1) map.setLevel(--level); } function setLevel(level) { map.setLevel(level); }
    14. 14. public sealed class StreamUriWinRTResolver : IUriToStreamResolver { private async Task<IInputStream> GetContent(string path) { try { Uri localUri = new Uri("ms-appx:///Html" + path); StorageFile f = await StorageFile.GetFileFromApplicationUriAsync(localUri); IRandomAccessStream stream = await f.OpenAsync(FileAccessMode.Read); return stream; } catch (Exception) { throw new Exception("Invalid path"); } } } }
    15. 15. Uri url = webMap.BuildLocalStreamUri("MyTag", "Map.html"); StreamUriWinRTResolver myResolver = new StreamUriWinRTResolver(); webMap.NavigateToLocalStreamUri(url, myResolver);
    16. 16. Geoposition pos = await _Geolocator.GetGeopositionAsync(); string[] temp = new string[2]; temp[0] = pos.Coordinate.Point.Position.Latitude.ToString(); temp[1] = pos.Coordinate.Point.Position.Longitude.ToString(); txtLatitude.Text = temp[0]; txtLongitude.Text = temp[1]; await webMap.InvokeScriptAsync("moving", temp);
    17. 17. Location Infomation
    18. 18. CivicAddress Represents the civic address data associated with a geographic location. Geocircle Describes a geographic circle with a center point and a radius. Geocoordinate Contains the information for identifying a geographic location. GeocoordinateSatelliteData Provides additional information about a Geocoordinate. This information is only a pplicable to position estimates obtained using satellite signals. Geolocator Provides access to the current geographic location. Geopoint Describes a geographic point. Geoposition Represents a location that may contain latitude and longitude data or civic addres s data. PositionChangedEventArgs Provides data for the PositionChanged event. StatusChangedEventArgs Provides information for the StatusChanged event.
    19. 19. Events PositionChanged Raised when the location is updated. StatusChanged Raised when the ability of the Geolocator to provide updated location changes. Method GetGeopositionAsync() Starts an asynchronous operation to retrieve the curre nt location of the device. GetGeopositionAsync(TimeSpan, TimeSpan) Starts an asynchronous operation to retrieve the curre nt location of the device.
    20. 20. Property 속성 사용 권한 DesiredAccuracy 읽기/쓰기 DesiredAccuracyInMeters 읽기/쓰기 LocationStatus 읽기 전용 MovementThreshold 읽기/쓰기 ReportInterval 읽기/쓰기 Description The accuracy level at which the Geolocator provides locatio n updates. Gets or sets the desired accuracy in meters for data return ed from the location service. The status that indicates the ability of the Geolocator to pro vide location updates. Gets and sets the distance of movement, in meters, relative to the coordinate from the last PositionChanged event, that is required for the Geolocator to raise a PositionChanged e vent. The requested minimum time interval between location upd ates, in milliseconds. If your application requires updates in frequently, set this value so that the location provider can c onserve power by calculating location only when needed.
    21. 21. namespace GeolocationApp { public sealed partial class MainPage : Page { private Geolocator geolocator = null; public MainPage() { this.InitializeComponent(); geolocator = new Geolocator(); } ………………………………………………….
    22. 22. async private void btnGetLocation_Click(object sender, RoutedEventArgs e) { try { // Carry out the operation Geoposition pos = await geolocator.GetGeopositionAsync(); tbLatitude.Text = pos.Coordinate.Latitude.ToString(); tbLongitude.Text = pos.Coordinate.Longitude.ToString(); tbAccuracy.Text = pos.Coordinate.Accuracy.ToString(); tbStatus.Text = GetStatusString(geolocator.LocationStatus); } catch (System.UnauthorizedAccessException) { ……………………………….
    23. 23. private string GetStatusString(PositionStatus status) { var strStatus = ""; switch (status) { case PositionStatus.Ready: strStatus = "Location is available."; break; PositionStatus.Initializing PositionStatus.NoData PositionStatus.Disabled PositionStatus.NotInitialized PositionStatus.NotAvailable : 초기화 : 데이터가 들어오지 않는 경우 : 사용할 수 없는 경우 : 초기화 되지 않은 경우 : 위치 정보가 존재하지 않는 경우
    24. 24. private string GetStatusString(PositionStatus status) { var strStatus = ""; switch (status) { case PositionStatus.Ready: strStatus = "Location is available."; break; PositionStatus.Initializing PositionStatus.NoData PositionStatus.Disabled PositionStatus.NotInitialized PositionStatus.NotAvailable : 초기화 : 데이터가 들어오지 않는 경우 : 사용할 수 없는 경우 : 초기화 되지 않은 경우 : 위치 정보가 존재하지 않는 경우
    25. 25. Sensor Fusion inputs and outputs (9-Axis)
    26. 26. Accelerometer Compass Gyrometer Inclinometer LightSensor OrientationSensor 가속도계 나침판 자이로스코프 센서 수평계 조도 센서 디바이스 방향 센서
    27. 27. Events ReadingChanged Occurs each time the compass reports a new sensor reading. Method GetCurrentReading Gets the current compass reading. GetDefault Returns the default compass. Property MinimumReportInterval 읽기 전용 Gets the minimum report interval supported by the compass. ReportInterval 읽기/쓰기 Gets or sets the current report interval for the compass.
    28. 28. Events ReadingChanged Occurs each time the accelerometer reports a new sensor reading. Shaken Occurs when the accelerometer detects that the PC has been shaken. Method GetCurrentReading Gets the current accelerometer reading. GetDefault Returns the default accelerometer. Property MinimumReportInterval 읽기 전용 Gets the minimum report interval supported by the accelerometer. ReportInterval 읽기/쓰기 Gets or sets the current report interval for the accelerometer.
    29. 29. Events ReadingChanged Occurs each time the gyrometer reports the current sensor reading. Method GetCurrentReading Gets the current gyrometer reading. GetDefault Returns the default gyrometer. Property MinimumReportInterval 읽기 전용 Gets the minimum report interval supported by the gyrometer. ReportInterval 읽기/쓰기 Gets or sets the current report interval for the gyrometer.
    30. 30. Events ReadingChanged Occurs each time the inclinometer reports the current sensor reading. Method GetCurrentReading Gets the current inclinometer reading. GetDefault Returns the default inclinometer . Property MinimumReportInterval 읽기 전용 Gets the minimum report interval supported by the inclinometer ReportInterval 읽기/쓰기 Gets or sets the current report interval for the inclinometer .
    31. 31. Events ReadingChanged Occurs each time the ambient-light reports the current sensor reading. Method GetCurrentReading Gets the current ambient-light reading. GetDefault Returns the default ambient-light. Property MinimumReportInterval 읽기 전용 Gets the minimum report interval supported by the ambient-light. ReportInterval 읽기/쓰기 Gets or sets the current report interval for the ambient-light.
    32. 32. ManipulationCompleted UIElement 개체에서 조작이 완료되고 활동이 없게 될 때 발생합니다. ManipulationDelta 입력 장치에서 조작 중에 위치를 변경하면 발생합니다. ManipulationInertiaStarting 입력 장치에서 조작 중에 UIElement 개체와의 연결이 끊어져 활동이 없게 될 때 발생합니다. ManipulationStarted 입력 장치가 UIElement 개체에서 조작을 시작할 때 발생합니다. ManipulationStarting 조작 프로세서가 처음으로 만들어지면 발생합니다.
    33. 33. None TranslateX TranslateY 0 1 2 TranslateRailsX 4 TranslateRailsY 8 Rotate Scale TranslateInertia RotateInertia ScaleInertia 16 32 64 128 256 All 65535 System 65536 조작 이벤트와의 그래픽 상호 작용을 제공하지 않습니다. X 축에서 대상을 좌표 이동하는 조작 작업을 허용합니다. Y 축에서 대상을 좌표 이동하는 조작 작업을 허용합니다. 레일 모드를 사용하여 X 축에서 대상을 좌표 이동하는 조작 작업을 허용합 니다. 레일 모드를 사용하여 Y 축에서 대상을 좌표 이동하는 조작 작업을 허용합 니다. 대상을 회전하는 조작 작업을 허용합니다. 대상의 배율을 조정하는 조작 작업을 허용합니다. 변환 작업에 관성을 적용합니다. 회전 동작에 관성을 적용합니다. 배율 작업에 관성을 적용합니다. Windows 8에서 직접 조작이 가능한 모드를 제외하고 모든 조작 상호 작용 모드를 활성화합니다. Windows 8.1부터는 모든 조작 상호 작용 모드를 사 용하도록 설정합니다. Direct Manipulation을 통해 지원되는 시스템 기반 터치 상호 작용을 활성화 합니다.
    34. 34. 생성자() this.InitializeComponent(); this.flvMain.SelectionChanged += flvMain_SelectionChanged; _transformGroup = new TransformGroup(); _previousTransform = new MatrixTransform() { Matrix = Matrix.Identity }; _compositeTransform = new CompositeTransform(); _transformGroup.Children.Add(_previousTransform); _transformGroup.Children.Add(_compositeTransform); flvMain.ManipulationCompleted += flvMain_ManipulationCompleted;
    35. 35. None TranslateX TranslateY 0 1 2 TranslateRailsX 4 TranslateRailsY 8 Rotate Scale TranslateInertia RotateInertia ScaleInertia 16 32 64 128 256 All 65535 System 65536 조작 이벤트와의 그래픽 상호 작용을 제공하지 않습니다. X 축에서 대상을 좌표 이동하는 조작 작업을 허용합니다. Y 축에서 대상을 좌표 이동하는 조작 작업을 허용합니다. 레일 모드를 사용하여 X 축에서 대상을 좌표 이동하는 조작 작업을 허용합 니다. 레일 모드를 사용하여 Y 축에서 대상을 좌표 이동하는 조작 작업을 허용합 니다. 대상을 회전하는 조작 작업을 허용합니다. 대상의 배율을 조정하는 조작 작업을 허용합니다. 변환 작업에 관성을 적용합니다. 회전 동작에 관성을 적용합니다. 배율 작업에 관성을 적용합니다. Windows 8에서 직접 조작이 가능한 모드를 제외하고 모든 조작 상호 작용 모드를 활성화합니다. Windows 8.1부터는 모든 조작 상호 작용 모드를 사 용하도록 설정합니다. Direct Manipulation을 통해 지원되는 시스템 기반 터치 상호 작용을 활성화 합니다.
    36. 36. img.ManipulationMode = ManipulationModes.TranslateX | ManipulationModes.TranslateY | ManipulationModes.ScaleInertia | ManipulationModes.Scale; img.ManipulationDelta += img_ManipulationDelta;
    37. 37. void img_ManipulationDelta(object sender, ManipulationDeltaRoutedEventArgs e) { _previousTransform.Matrix = _transformGroup.Value; Point center = _previousTransform.TransformPoint(new Point(e.Position.X, e.Position.Y)); //중심 위치를 설정 _compositeTransform.CenterX = center.X; _compositeTransform.CenterY = center.Y; //변화된 X, Y 좌표를 적용한다. _compositeTransform.TranslateX = e.Delta.Translation.X; _compositeTransform.TranslateY = e.Delta.Translation.Y;
    38. 38. double aw = ((Image)e.OriginalSource).ActualWidth * _previousTransform.Matrix.M11; double movePoint = aw + _previousTransform.Matrix.OffsetX; double movePersent = movePoint / flvMain.ActualWidth * 100; //변화된 크기를 적용한다. _compositeTransform.ScaleX = _compositeTransform.ScaleY = e.Delta.Scale; e.Handled = true; }
    39. 39. this.PreviousPageNumber = this.CurrentPageNumber; this.CurrentPageNumber = flvMain.SelectedIndex; _previousTransform.Matrix = new Matrix(1, 0, 0, 1, 0, 0); ((Image)flvMain.Items[this.PreviousPageNumber]).RenderTransform = null; ((Image)flvMain.Items[this.CurrentPageNumber]).RenderTransform = _transformGroup; txtPageView.Text = this.CurrentPageNumber.ToString() + " / " + flvMain.Items.Count().ToString();
    40. 40. 2시간만에 끝내는 콘텐츠 앱 개발 경품추첨 블루투스이어폰 손난로 겸용 충전기 Notice • 행사 종료 후 설문지를 작성하여 등록 데스크에 제출해 주세요. 소정의 기념품을 드립니다.
    41. 41. http://sdrv.ms/11igPnr THANK YOU
    42. 42. 함께 삽질 할 때, 우린 아무것도 두려울 것이 없었다 ! 윈도우 & 윈도우폰 개발 모임 시즌3 1월 16일 ~ 3월 27일 개발주제 자유 참석 조건 개발의지만 있다면 누구나 , 최소 3회 참여 날짜 격주 목요일 다음 모임 1월 28일 (화) : 설 연휴 관계로 이날만 화요일 특전 개발 기간 장소 지원 (at 광화문오피스) 다과 및 뒷풀이 시즌 종료까지 앱 업로드를 마친 개발자에게 경품 증정 App of 시즌3 수상자에게 8인치 Tablet 증정 기대효과 개발 이슈 및 주요 내용 공유 고수의 원포인트 레슨 개발 중간내용을 공유하며 개발 동기부여 참여방법 페이스북 페이지 좋아요 클릭 & 모임 출석 https://www.facebook.com/groups/vvapps/
    43. 43. 2014년 1월 새해 명품 특강! 센서 활용 앱 개발 경품추첨 마이크로소프트 웨지 모바일 키보드 스컬프트 컴포트 마우스 Notice • 행사 종료 후 설문지를 작성하여 등록 데스크에 제출해 주세요. 소정의 기념품을 드립니다.

    ×