Wm勉強会@関西#1

3,795 views

Published on

0 Comments
1 Like
Statistics
Notes
  • Be the first to comment

No Downloads
Views
Total views
3,795
On SlideShare
0
From Embeds
0
Number of Embeds
194
Actions
Shares
0
Downloads
9
Comments
0
Likes
1
Embeds 0
No embeds

No notes for slide

Wm勉強会@関西#1

  1. 1. GPS を使ったアプリケーション スマートフォン勉強会@関西 #1 tmyt
  2. 2. アジェンダ <ul><li>自己紹介 </li></ul><ul><li>今回のネタ </li></ul><ul><li>仕様の紹介 </li></ul><ul><li>GPSを使ってみる </li></ul><ul><li>まとめ </li></ul>
  3. 3. 自己紹介 <ul><li>WM 周りでは tmyt ってことにしてます </li></ul><ul><ul><li>本名-> tumoyuta -> tmyt ですね </li></ul></ul><ul><li>日頃は大学生をやってます </li></ul><ul><li>プログラミング周りは広く超浅く。 </li></ul><ul><ul><li>極度の飽き性ともいいます。 </li></ul></ul><ul><li>小さいときからハンドヘルドコンピュータとか使ってみたかった。 </li></ul><ul><ul><li>気がついたら WM ユーザに。楽しんでます。 </li></ul></ul>
  4. 4. 自己紹介つづき <ul><li>作った物 </li></ul><ul><ul><li>RSS Ticker Today </li></ul></ul><ul><ul><ul><li>Today で RSS をするする流します。 CPU ぶん回します </li></ul></ul></ul><ul><ul><li>BTAutoSync </li></ul></ul><ul><ul><ul><li>Bluetooth 圏内に母艦があると自動で ActiveSync します </li></ul></ul></ul><ul><ul><li>TodayNotes </li></ul></ul><ul><ul><ul><li>Today に 1 行ずつのメモを表示します。手にメモする感覚でメモとるようなのが目的。 </li></ul></ul></ul><ul><ul><li>YOPViewerWM </li></ul></ul><ul><ul><ul><li>某 Phone の産経新聞を読むという問題作 </li></ul></ul></ul>
  5. 5. 今回のネタ <ul><li>最近GPS搭載の端末が増えてきました。 </li></ul><ul><ul><li>国内では X04HT, X05HT, HT-01A, HT-02A, Touch Diamond, P3600 あたり </li></ul></ul><ul><ul><li>海外では結構種類でてます。 </li></ul></ul><ul><li>某Phoneには「GPS-R」というGPSリマインダがあるようです。 </li></ul><ul><li>ネタとしてもおもしろそうなのでこれを作ってみよう </li></ul>
  6. 6. GPSリマインダの仕様 <ul><li>項目はPIMの仕事として登録する </li></ul><ul><li>位置情報は仕事アイテムのメモに書く </li></ul><ul><li>GPSで取得した位置と目的地が近くなったらトーストで通知する </li></ul><ul><li>現在地と目的地の誤差は日本では約20m </li></ul><ul><li>とりあえずC++で書きます </li></ul>
  7. 7. とりあえずGPSってなによ <ul><li>Global Positioning System。日本語だと全地球測位システム </li></ul><ul><li>地球の周回軌道上の衛星からの電波を受信して現在位置を割り出すもの </li></ul><ul><li>GPSの電波に記録されている時間とデバイスの時間を比較して数学的に位置を求める </li></ul>
  8. 8. WMにおけるGPS <ul><li>GPS Intermediate Driver がGPSを抽象化 </li></ul><ul><li>実際のハードウェアからのデータを解析せずともデータを利用可能 </li></ul><ul><li>GPS衛星の位置ももちろん参照可能 </li></ul><ul><li>位置情報のほかに、進行方向や速度などもOSが計算してくれるので利用者は値を読むだけ </li></ul><ul><li>非常にお手軽にGPSを扱えます </li></ul>
  9. 9. GPSから位置情報を取得する <ul><li>GPS リマインダなので GPS はもちろん必須 </li></ul><ul><li>GPS は API で簡単にアクセスできます。 </li></ul><ul><ul><li>GPSOpenDevice </li></ul></ul><ul><ul><li>GPSGetPosition </li></ul></ul><ul><ul><li>GPSCloseDevice </li></ul></ul><ul><ul><li>GPSGetDeviceState </li></ul></ul><ul><li>使う API は 4 つだけ。とても簡単 </li></ul><ul><li>CreateEvent などもう少し API は必要ですが ... </li></ul>
  10. 10. GPS APIを使うには? <ul><li>必要なヘッダ </li></ul><ul><ul><li>windows.h </li></ul></ul><ul><ul><li>gpsapi.h </li></ul></ul><ul><li>必要なライブラリ </li></ul><ul><ul><li>gpsapi.lib </li></ul></ul><ul><li>SDK で GPS を扱うのに必要なのはこれだけ </li></ul>
  11. 11. GPSOpenDevice <ul><li>GPS 中間ドライバをオープンします </li></ul><ul><li>使い方 </li></ul><ul><ul><li>データ着信に応答するためのイベントを作成 </li></ul></ul><ul><ul><ul><li>これらを第 1 引数、第 2 引数としてわたす </li></ul></ul></ul><ul><ul><li>戻り値として中間ドライバのハンドルが得られるので GPS へのアクセスはこれを使う </li></ul></ul><ul><ul><li>GPS がいらなくなったら GPSCloseDevice で閉じる </li></ul></ul>
  12. 12. GPSCloseDevice <ul><li>中間ドライバを閉じる </li></ul><ul><li>使い方 </li></ul><ul><ul><li>GPSOpenDevice で得られたハンドルを渡す </li></ul></ul>
  13. 13. GPSGetPosition <ul><li>GPS から実際に位置情報を取得します </li></ul><ul><li>使い方 </li></ul><ul><ul><li>準備 </li></ul></ul><ul><ul><ul><li>GPSOpenDevice でハンドルを得る </li></ul></ul></ul><ul><ul><ul><li>GPS_POSITION 構造体をセットする </li></ul></ul></ul><ul><ul><ul><ul><li>GPS_POSITION::dwSize に構造体のサイズ </li></ul></ul></ul></ul><ul><ul><ul><ul><li>GPS_POSITION::dwVersion に GPS_VERSION_1 </li></ul></ul></ul></ul><ul><ul><li>あとは関数を呼ぶだけ。 </li></ul></ul><ul><ul><li>構造体に GPS で取得した現在位置に関する情報がたくさん得られます </li></ul></ul>
  14. 14. GPSGetDeviceState <ul><li>現在の GPS デバイスの状態を取得します </li></ul><ul><li>使い方 </li></ul><ul><ul><li>引数として渡す構造体に次の値をセット </li></ul></ul><ul><ul><ul><li>GPS_DEVICE::dwSize に構造体のサイズ </li></ul></ul></ul><ul><ul><ul><li>GPS_DEVICE::dwVersion に GPS_VERSION_1 </li></ul></ul></ul><ul><ul><li>これで関数を呼ぶと中間ドライバの状態を取得できます。 </li></ul></ul><ul><ul><li>関数が成功すると構造体に電源の On/Off などの状態が書き込まれます。 </li></ul></ul>
  15. 15. GPS の使用例 GPSの電源状態を取得してみる <ul><li>方法 1 </li></ul><ul><ul><li>GPSGetPosition を呼び出し、 GPS_POSITION::dwFlags の値を読む </li></ul></ul><ul><ul><li>GPS_DATA_FLAGS_HARDWARE_OFF が含まれていれば Off </li></ul></ul><ul><li>方法 2 </li></ul><ul><ul><li>GPSGetDeviceState を呼び出し GPS_DEVICE::dwDeviceState の値を読む </li></ul></ul><ul><ul><li>SERVICE_STATE_ON なら電源 ON </li></ul></ul>
  16. 16. GPS の使用例 捕捉しているGPSの個数を調べる <ul><li>GPSGetPosition を呼び出し現在位置の情報を得る </li></ul><ul><li>GPS_POSITION::dwSatelliteCount を参照すると現在捕捉している衛星の個数を調べられる </li></ul><ul><li>GPS_POSITION::dwSatellitesInView を参照すると現在見えている衛星の個数を調べられる </li></ul>
  17. 17. GPS の使用例 現在位置を調べる <ul><li>GPSGetPosition を呼び出し現在位置の情報を得る </li></ul><ul><li>GPS_POSITION::dblLatitude GPS_POSITION::dblLongitude それぞれに緯度、経度が格納されています </li></ul>
  18. 18. PIMにアクセスする <ul><li>PIMへのアクセスはCOMを使います </li></ul><ul><li>MSDNでPOOMの項をみるといろいろ書いてます </li></ul><ul><li>POOMはちょっと面倒です。順番にインスタンスを取得しないといけません </li></ul><ul><li>とりあえず今回は仕事が読みたいのでそれ以外はスルーします </li></ul>
  19. 19. とりあえず仕事にアクセスしたい <ul><li>手順としては次のような感じです </li></ul><ul><ul><li>IPOutlookApp2 オブジェクトの作成 </li></ul></ul><ul><ul><li>POOM にログイン </li></ul></ul><ul><ul><li>フォルダを取得 </li></ul></ul><ul><ul><li>アイテムコレクションの取得 </li></ul></ul><ul><ul><li>アイテムを取得 </li></ul></ul><ul><ul><li>アイテムから文字列などを読む </li></ul></ul><ul><li>使った後は IUnknown::Release() で解放 </li></ul>
  20. 20. POOMを図で表すと… <ul><li>POOMはこんな構造です </li></ul>IPOutlookApp2 IFolder IPOutlookItemCollection ITask など
  21. 21. タスクトレイにアイコンを置く <ul><li>PC と全く同じで Shell_NotifyIcon を使用できます </li></ul><ul><li>PC と違い GetCursorPos() が使用できないので、メニューの位置を決め打ちにしなければなりません </li></ul>
  22. 22. シェル通知を出す <ul><li>バッテリが無くなったときに出るあれです </li></ul><ul><li>下から出てくるのでトーストと呼びます </li></ul><ul><li>構造体に値セットして SHNotificationAdd 呼べば ぴこん ! と飛び出します </li></ul><ul><li>本文部分は IE なので HTML が 使用可能です </li></ul>
  23. 23. 解説が終わったので… <ul><li>デモしましょう。 </li></ul><ul><li>と言いたいのですが、GPSなので屋内では紹介できません </li></ul><ul><li>GPS付きのデバイスをお持ちのかたは試してみてください </li></ul>
  24. 24. まとめ <ul><li>WM での GPS へのアクセスはとっても簡単! </li></ul><ul><li>PIM へのアクセスは若干めんどくさい </li></ul><ul><li>シェル周りはたいしたことはない </li></ul><ul><ul><li>凝ったアプリもそこそこ楽につくれる?? </li></ul></ul><ul><li>今回の資料は Web で配布してます。 </li></ul><ul><ul><li>http://refy.net/mobile/spwsk/01.pdf </li></ul></ul><ul><ul><li>http://refy.net/mobile/spwsk/01.zip </li></ul></ul>
  25. 25. ご静聴ありがとうございました

×