
ในการใช้งาน GPS บน Windows Mobile นั้น Microsoft มี API แบบ Native (ใช้งานด้วย C++) และ GPS Intermediate Driver รองรับการเขียนโปรแกรมติดต่อกับอุปกรณ์ GPS ให้เราเรียบร้อยแล้ว ซึ่งข้อดีของมันก็คือ
- หลายโปรแกรม สามารถใช้งานอุปกรณ์ GPS พร้อมกันได้ (ยกเว้น มีโปรแกรมที่เปิด Serial Port ไปยัง COM Port ของ GPS โดยตรง)
- คุณสามารถตั้งค่าให้ระบบ Intermediate Driver ทำการ Log ข้อมูลลงไฟล์ได้อัตโนมัติ เมื่อ GPS เปิดใช้งาน
- ไม่จำเป็นต้องเรียนรู้ภาษา NMEA หรือการคำนวณใดๆ ที่เกี่ยวข้องกับ GPS เลย
แต่อย่าเพิ่งรีบไปเปิด PInoke.net หาทางเรียก API นะครับ เพราะ Microsoft ก็ได้สร้าง Wrapper มาให้พร้อมแล้วด้วยเหมือนกัน สะดวกไหมล่ะ
ตัว Code จะอยู่ใน C:\Program Files (x86)\Windows Mobile 6 SDK\Samples\PocketPC\CS\GPS (เครื่อง 64-bit) หรือ C:\Program Files\Windows Mobile 6 SDK\Samples\PocketPC\CS\GPS สำหรับเครื่อง 32-bit ครับ
เมื่อเปิดไฟล์ Solution ขึ้นมา เราอาจจะต้องทำการ Convert ก่อน เพราะ Solution เป็นของ Visual Studio 2005 ให้กด Finish ได้เลย
จากนั้น เปลี่ยนการ Compile เป็นแบบ Release แล้วสั่ง Rebuild Solution
จากนั้น ปิด Visual Studio และเปิด Folder bin\Release ขึ้นมา เพื่อ Copy ไฟล์ Microsoft.WindowsMobile.Samples.Location.dll
จากนั้น สร้างโปรเจคใหม่ขึ้นมา และสร้าง Folder Lib ภายใน Projectr ก่อนจะนำไฟล์ Microsoft.WindowsMobile.Samples.Location.dll วางลงไปด้านใน
จากนั้น Add Reference โดยที่เลือกไฟล์ Microsoft.WindowsMobile.Samples.Location.dll ที่อยู่ใน Folder Lib ของโปรเจค (ไม่ใช่ตัวที่อยู่ใน C:\Program Files (x86)\Windows Mobile 6 SDK\Samples\PocketPC\CS\GPS\bin\Release)
จากนั้น ขั้นแรก ทำการสร้าง Listbox ขึ้นมา 1 ตัว บน Form แล้วจึงเปิด โค๊ดขึ้นมา เพื่อแก้ไขดังนี้
เพิ่ม Using ที่ด้านบน
- using System;
- using System.Linq;
- using System.Collections.Generic;
- using System.ComponentModel;
- using System.Data;
- using System.Drawing;
- using System.Text;
- using System.Windows.Forms;
-
- using Microsoft.WindowsMobile.Samples.Location;
-
- namespace SmartDeviceProject5
- {
- public partial class Form1 : Form
- {
จากนั้น ใน Contructor ของ Form เพิ่มโค๊ดดังนี้
ใส่โค๊ดเปิด GPS
- public Form1()
- {
- InitializeComponent();
-
- Gps gps = new Gps();
- gps.Open();
- gps.LocationChanged += new LocationChangedEventHandler(gps_LocationChanged);
- }
และเพิ่มฟังก์ชั่น เพื่อรับค่าจาก GPS
Event Handler ของ GPS
- private void gps_LocationChanged(object sender, LocationChangedEventArgs args)
- {
- if (args.Position.LatitudeValid && args.Position.LongitudeValid)
- {
- this.listBox1.Items.Add(
- string.Format("Lat:{0}, Lon:{1}", args.Position.Latitude, args.Position.Longitude));
- }
- }
จากนั้น รันโปรเจคด้วย Emulator ของ Windows Mobile 6.5 QVGA ที่เราได้ตั้งค่าไว้ตาม ตอนที่ 1 ซึ่งมีการติดตั้งโปรแกรม Fake GPS ไว้แล้ว เพื่อจำลองการทำงานของ GPS
แล้วคุณจะพบว่า…
และนั่นคือคำถาม
จะเห็นว่า เราสามารถอ่านค่าจาก GPS ได้แล้ว แต่ว่าโปรแกรมมันกลับ Exception ซะอย่างนั้น เพราะอะไรล่ะ?
ผมทิ้งระเบิดไว้ก่อน
และเดี๋ยวผมจะทิ้งคำใบ้ไว้ วันละ 1 คำใบ้ แล้ว เมื่อครบ 5 คำใบ้ แล้วจะมาเฉลยครับ ว่าจะแก้ไขได้อย่างไร (ผมเคยเขียนเรื่องนี้แล้วด้วยละ) ถ้ามีเพื่อนๆ ที่สามารถเฉลยได้ก่อนผม โดยการมาตอบไว้กระทู้นี้ (อย่าใช้ Comment) ผมมีของรางวัลเล็กๆ น้อยๆ เป็นพวงกุญแจไฟฉาย Aero Peek ลาย Windows 7 มาแจก 1 ชิ้นครับ สั่งตรงจาก Company Store ที่ Microsoft Redmond มาเลยทีเดียว 
UPDATE มีคำตอบ อยู่ในกระทู้แล้วนะครับ ตามมาอ่านเลย
(*** เดี๋ยวของรางวัล นัดรับพร้อมกับกิจกรรม MyPhone สิ้นเดือนนี้ ที่ Microsoft Office ตึก All Season ครับ - ไม่ใช่ชื่อโปรแกรมนะนั่นอะ เหอๆๆๆ ***)