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