Я ищу очень простое решение, как получить данные GPS с мобильного телефона WM6. Я не ищу библиотеку-оболочку GPS (похоже, Google находит ТОЛЬКО библиотеки GPS...). Я был бы признателен за кусок кода, который делает именно это: запускает GPS, получает долготу и широту, завершает GPS. Больше ничего. Я предполагаю, что с .NET Compact Framework мне нужно будет использовать P/Invoke.
Есть идеи? Большое спасибо.
Запрос местоположения GPS (только долгота и широта) с телефона WM6 с использованием .NET CF
Ответы (1)
Вы говорите, что не ищете библиотеку GPS Wrapper, но хотите запросить GPS. Самый простой способ сделать это — использовать промежуточную библиотеку GPS, которая представляет собой драйвер потокового интерфейса. Для его вызова из управляемого кода требуется некоторая форма оболочки, которая выполняет вызовы P/Invoke. Пишите ли вы это или используете уже существующую, зависит от вас, но вы все равно будете использовать оболочку.
Чтобы просто открыть GPS, получить позицию и закрыть, будет набор из трех вызовов: GpsOpenDevice, GpsGetPosition и GpsCloseDevice, однако после вызова GpsOpenDevice вам действительно нужно знать, когда инициализируется драйвер перед вызовом GpsGetPosition, поэтому вам, вероятно, потребуется также вызвать GpsGetDeviceState для знать, когда он будет готов.
Поскольку вам не нужны уведомления, вызов GpsOpenDevice прост — просто передайте нули (или IntPtr.Zero в зависимости от того, как вы определяете свой метод P/Invoke) для всех параметров.
GpsGetPosition принимает указатель на структуру GPS_POSITION. Это немного уродливый зверь, но не так уж плохо, поскольку он не имеет никаких указателей, которые нужно выделить, и CF Marshaler с небольшой помощью может довольно легко его маршалировать.
Я не буду приводить этот код здесь, так как он длинный, к тому же он уже сделан в образце приложения GPS, которое Microsoft предоставляет вместе с WinMo SDK (посмотрите на своем жестком диске в %PROGRAM FILES%\Windows Mobile 6 SDK\Samples\PocketPC\CS\GPS).