Показать сообщение отдельно
Старый 18.10.2015, 20:40   #507
Lexx09
Старший Пользователь
 
Регистрация: 18.04.2009
Город: Краснодар
Регион: 23, 93
Машина: Приора хэтчбек
Сообщений: 977
Lexx09 has much to be proud ofLexx09 has much to be proud ofLexx09 has much to be proud ofLexx09 has much to be proud ofLexx09 has much to be proud ofLexx09 has much to be proud ofLexx09 has much to be proud ofLexx09 has much to be proud ofLexx09 has much to be proud ofLexx09 has much to be proud ofLexx09 has much to be proud of
По умолчанию

Немного поковырялся во внутренностях Bluestacks по поводу GPS...

Для начала посмотрел реестр. В ветке HKLM\SOFTWARE\BlueStacks\Guests\Android\Config есть такие параметры:
  • GpsComPort
  • GpsLatitude
  • GpsLongitude
  • GpsMode
  • GpsSource
Поискал эти слова в файлах BlueStacks, нашел в нескольких.

Начал с HD-Agent.exe. Нашел в нем форму GpsSettings, которая, вероятно, служит для настройки работы с GPS. В этом же файле есть функция, которая, если GpsMode<>1, добавляет меню показа этой формы в контекстное меню иконки агента в трее. Но эта функция ниоткуда не вызывается. Правкой HD-Agent.exe не удалось отобразить этот пункт меню.

Далее в HD-Agent.exe нашел возможные значения параметра GpsSource:
  • 1 - GPS_SOURCE_HW_DEVICE (Hardware device) - координаты берутся из COM-порта, указанного в параметре GpsComPort (порт указывается не просто цифрой, а полностью - "COM1", "COM2" и т.д.)
  • 2 - GPS_SOURCE_WIFI (Wifi triangulation)
  • 4 - GPS_SOURCE_IP (IP based GeoLocation)
  • 8 - GPS_SOURCE_USER (User specified location) - координаты берутся из реестра (параметры GpsLatitude и GpsLongitude)
Потом разбирался с HD-Frontend.exe. Нашел в нем функцию UpdateGpsCoordinates. Сюда по логам, она вызывается каждые 20 сек. В логах такие есть записи:
Код:
NFO Inside UpdateGpsCoordinates
HTTPHandler:  POST request from 127.0.0.1:7055
INFO Stopping Gps Service, gpsMode = 1, gpsSource = 0, IsWindows7AndBelow() = True
Эта функция в двух случаях берет координаты из реестра и куда-то отправляет:
  1. Если GpsMode=1 и GpsSource=8
  2. Если GpsMode=1 и GpsSource<>8 и Windows версии 8 и выше
Проверил работу с COM-портом. Прописал GpsMode=1, GpsSource=1, GpsComPort=COM2 (виртуальный порт в GpsGate). Выяснил, что обращение к COM-порту происходит только один раз и только в момент запуска приложения, требующего GPS. При этом в GpsGate мелькнет надпись "1 client connected". Во время дальнейшей работы приложения обращений к COM-порту нет. Причем, с первого раза координаты все равно не определяются. Нужно приложение пару раз перезапустить, тогда координаты определятся.

Проверил работу с получением координат из реестра. Прописал GpsMode=1, GpsSource=8, GpsLatitude и GpsLongitude - какие-то координаты. Координаты определяются, но так же, как и в предыдущем случае - приложение нужно пару раз перезапустить, тогда оно увидит правильные координаты (прописанные в реестре).

Далее решил разобраться с датчиком местоположения (на основе VK-172). В логах нашел такие строки:
Код:
INFO Need Windows 8 or Higher for GpsLocator to work.
Т.е., данные с датчика местоположения берутся только в Win8 и выше. Странное ограничение, ведь в Win7 тоже есть датчики местоположения. Решил исправить это недоразумение и пропатчил HD-Agent.exe. В логах появились такие записи:
Код:
HD-GpsLocator INFO LocationChanged
HD-GpsLocator INFO the registry path returned is Software\BlueStacks\Guests\Android\Config
HD-GpsLocator INFO the registry path returned is Software\BlueStacks\Guests\Android\Config
HD-GpsLocator INFO Latitude: 45.014058
HD-GpsLocator INFO Longitude: 39.050568
Судя по логам, координаты берутся с датчика практически в реальном времени. Встречается 9 таких записей за секунду. При этом также обновляются координаты в реестре. Но приложения, запущенные в Bluestacks, координаты в реальном времени не видят.

С помощью GpsDirect можно эмулировать датчик местоположения, получая данные с какого-либо COM-порта. Bluestacks с таким датчиком работать будет.

Для работы с датчиком местоположения, в момент запуска Bluestacks GpsSource не должен быть равен 8. После запуска Bluestacks и подключения к датчику местоположения GpsSource становится равным 2.

В общем, возможность для работы с GPS в реальном времени есть, но не реализована полностью. Возможно, причина в той части Bluestacks, которая эмулирует Android, т.к. в Windows-части координаты считываются и отсылаются.
__________________
Приора хэтчбек
Win7 x64 Pro, Intel Core i3-3240 Ivy Bridge 2x3.4GHz HT, DDR3 2x4Gb, SSD SiliconPower Ace A55 128GB SATAIII, ASRock B75M-ITX, M2-ITX rev.2F, GPS Beitian BN-808, Logitech Wireless Touch Keyboard K400r, ИК-пульт Prology RCD-350, круиз-контроль...
Lexx09 вне форума   Ответить с цитированием