25
GPS をををををををををををを スススススススススス スス @西 #1 tmyt

Wm勉強会@関西#1

  • Upload
    shigure

  • View
    3.578

  • Download
    5

Embed Size (px)

Citation preview

Page 1: Wm勉強会@関西#1

GPSを使ったアプリケーション

スマートフォン勉強会@関西 #1

tmyt

Page 2: Wm勉強会@関西#1

アジェンダ 自己紹介 今回のネタ 仕様の紹介 GPS を使ってみる まとめ

Page 3: Wm勉強会@関西#1

自己紹介 WM 周りでは tmyt ってことにしてます

本名→ tumoyuta → tmyt ですね 日頃は大学生をやってます プログラミング周りは広く超浅く。

極度の飽き性ともいいます。 小さいときからハンドヘルドコンピュータ

とか使ってみたかった。 気がついたら WM ユーザに。楽しんでます。

Page 4: Wm勉強会@関西#1

自己紹介つづき 作った物

RSS Ticker Today Today で RSS をするする流します。 CPU ぶん回しま

す BTAutoSync

Bluetooth 圏内に母艦があると自動で ActiveSync します

TodayNotes Today に 1 行ずつのメモを表示します。手にメモする

感覚でメモとるようなのが目的。 YOPViewerWM

某 Phone の産経新聞を読むという問題作

Page 5: Wm勉強会@関西#1

今回のネタ 最近 GPS 搭載の端末が増えてきました。

国内では X04HT, X05HT, HT-01A, HT-02A, Touch Diamond, P3600 あたり

海外では結構種類でてます。 某 Phone には「 GPS-R 」という GPS リマ

インダがあるようです。 ネタとしてもおもしろそうなのでこれを作っ

てみよう

Page 6: Wm勉強会@関西#1

GPSリマインダの仕様 項目は PIM の仕事として登録する 位置情報は仕事アイテムのメモに書く GPS で取得した位置と目的地が近くなった

らトーストで通知する 現在地と目的地の誤差は日本では約 20m とりあえず C++ で書きます

Page 7: Wm勉強会@関西#1

とりあえず GPSってなによ Global Positioning System 。日本語だと全地

球測位システム 地球の周回軌道上の衛星からの電波を受信し

て現在位置を割り出すもの GPS の電波に記録されている時間とデバイ

スの時間を比較して数学的に位置を求める

Page 8: Wm勉強会@関西#1

WMにおける GPS

GPS Intermediate Driver が GPS を抽象化 実際のハードウェアからのデータを解析せず

ともデータを利用可能 GPS 衛星の位置ももちろん参照可能 位置情報のほかに、進行方向や速度なども

OS が計算してくれるので利用者は値を読むだけ

非常にお手軽に GPS を扱えます

Page 9: Wm勉強会@関西#1

GPSから位置情報を取得する GPS リマインダなので GPS はもちろん必須 GPS は API で簡単にアクセスできます。

GPSOpenDevice GPSGetPosition GPSCloseDevice GPSGetDeviceState

使う API は 4 つだけ。とても簡単 CreateEvent などもう少し API は必要ですが ...

Page 10: Wm勉強会@関西#1

GPS APIを使うには? 必要なヘッダ

windows.h gpsapi.h

必要なライブラリ gpsapi.lib

SDK で GPS を扱うのに必要なのはこれだけ

Page 11: Wm勉強会@関西#1

GPSOpenDevice

GPS 中間ドライバをオープンします 使い方

データ着信に応答するためのイベントを作成 これらを第 1 引数、第 2 引数としてわたす

戻り値として中間ドライバのハンドルが得られるので GPS へのアクセスはこれを使う

GPS がいらなくなったら GPSCloseDevice で閉じる

Page 12: Wm勉強会@関西#1

GPSCloseDevice

中間ドライバを閉じる 使い方

GPSOpenDevice で得られたハンドルを渡す

Page 13: Wm勉強会@関西#1

GPSGetPosition

GPS から実際に位置情報を取得します 使い方

準備 GPSOpenDevice でハンドルを得る GPS_POSITION 構造体をセットする

GPS_POSITION::dwSize に構造体のサイズ GPS_POSITION::dwVersion に GPS_VERSION_1

あとは関数を呼ぶだけ。 構造体に GPS で取得した現在位置に関する情報

がたくさん得られます

Page 14: Wm勉強会@関西#1

GPSGetDeviceState

現在の GPS デバイスの状態を取得します 使い方

引数として渡す構造体に次の値をセット GPS_DEVICE::dwSize に構造体のサイズ GPS_DEVICE::dwVersion に GPS_VERSION_1

これで関数を呼ぶと中間ドライバの状態を取得できます。

関数が成功すると構造体に電源の On/Off などの状態が書き込まれます。

Page 15: Wm勉強会@関西#1

GPSの使用例GPSの電源状態を取得してみる 方法 1

GPSGetPosition を呼び出し、GPS_POSITION::dwFlags の値を読む

GPS_DATA_FLAGS_HARDWARE_OFF が含まれていれば Off

方法 2 GPSGetDeviceState を呼び出し

GPS_DEVICE::dwDeviceState の値を読む SERVICE_STATE_ON なら電源 ON

Page 16: Wm勉強会@関西#1

GPSの使用例捕捉している GPSの個数を調べる GPSGetPosition を呼び出し現在位置の情報

を得る GPS_POSITION::dwSatelliteCount を参照す

ると現在捕捉している衛星の個数を調べられる

GPS_POSITION::dwSatellitesInView を参照すると現在見えている衛星の個数を調べられる

Page 17: Wm勉強会@関西#1

GPSの使用例現在位置を調べる GPSGetPosition を呼び出し現在位置の情報

を得る GPS_POSITION::dblLatitude

GPS_POSITION::dblLongitudeそれぞれに緯度、経度が格納されています

Page 18: Wm勉強会@関西#1

PIMにアクセスする PIM へのアクセスは COM を使います MSDN で POOM の項をみるといろいろ書い

てます POOM はちょっと面倒です。順番にインス

タンスを取得しないといけません とりあえず今回は仕事が読みたいのでそれ以

外はスルーします

Page 19: Wm勉強会@関西#1

とりあえず仕事にアクセスしたい 手順としては次のような感じです

1. IPOutlookApp2 オブジェクトの作成2. POOM にログイン3. フォルダを取得4. アイテムコレクションの取得5. アイテムを取得6. アイテムから文字列などを読む

使った後は IUnknown::Release() で解放

Page 20: Wm勉強会@関西#1

POOMを図で表すと… POOM はこんな構造です

IPOutlookApp2

IFolder

IPOutlookItemCollection

ITask など

Page 21: Wm勉強会@関西#1

タスクトレイにアイコンを置く PC と全く同じで Shell_NotifyIcon を使用で

きます PC と違い GetCursorPos() が使用できない

ので、メニューの位置を決め打ちにしなければなりません

Page 22: Wm勉強会@関西#1

シェル通知を出す バッテリが無くなったときに出るあれです 下から出てくるのでトーストと呼びます 構造体に値セットして SHNotificationAdd 呼

べば ぴこん ! と飛び出します 本文部分は IE なので HTML が

使用可能です

Page 23: Wm勉強会@関西#1

解説が終わったので… デモしましょう。

と言いたいのですが、 GPS なので屋内では紹介できません

GPS 付きのデバイスをお持ちのかたは試してみてください

Page 24: Wm勉強会@関西#1

まとめ WM での GPS へのアクセスはとっても簡

単! PIM へのアクセスは若干めんどくさい シェル周りはたいしたことはない

凝ったアプリもそこそこ楽につくれる??

今回の資料は Web で配布してます。 http://refy.net/mobile/spwsk/01.pdf http://refy.net/mobile/spwsk/01.zip

Page 25: Wm勉強会@関西#1

ご静聴ありがとうございました