PCCar.ru - Ваш автомобильный компьютер

PCCar.ru - Ваш автомобильный компьютер (http://pccar.ru/index.php)
-   Bluestacks (http://pccar.ru/forumdisplay.php?f=132)
-   -   iCarDS + Bluestacks + Яндекс.Навигатор (http://pccar.ru/showthread.php?t=19528)

Krysanov 27.10.2015 14:27

Lexx09, это все просто замечательно.
Может подскажешь как подстроить громкость блюстака? Вроде выставляю как мне надо, но после пробуждения опять max.. А вообще было бы лучше как в икаре да с "открытыми форточками", если ты понимаешь о чем я!

vasekbfg 27.10.2015 16:22

Цитата:

Сообщение от Lexx09 (Сообщение 340997)
Не планирую, а продолжаю потрошить Bluestacks.:yes2:

В папке /data/downloads нашел приложение BlueStacksLocationProvider.apk. Это приложение запрашивает координаты у функции UpdateGpsCoordinates.

Приложение состоит из двух сервисов и одного класса.

Первый сервис "GpsServiceStartReceiver" - автозагружаемый, и после автозагрузки запускает второй сервис "GpsService". Т.к. в Bluestacks версий 0.9.х.х и выше время до срабатывания автозагрузки составляет секунд 30, то первый сервис запустится через это время, и только потом "пойдут" координаты.

Второй сервис "GpsService" просто запускает класс "QueryCoordinates", который в фоне циклически запрашивает координаты у функции UpdateGpsCoordinates и устанавливает их в качестве текущих. Но делает это как-то странно, а именно:
  • Каждые 20 сек посылается запрос к функции UpdateGpsCoordinates для получения координат.
  • Затем, в течение следующих 20 сек, эти полученные координаты устанавливаются в качестве текущих каждые 2 сек.
И так в бесконечном цикле. Это видно на 1-м и 2-м скриншотах (цифры после "Received result" - это координаты).

Еще нашел вот что - если в папке /data создать файл gps_debug_log, то в логах Android появятся записи приложения BlueStacksLocationProvider.apk. Примеры на первых 5-ти скриншотах:
  • 1-й и 2-й скриншоты - координаты берутся из реестра (GpsMode=1, GpsSource=8).
  • 3-й, 4-й и 5-й скриншоты - координаты берутся с датчика местоположения (GpsMode=1, GpsSource=2).
На 3-м скриншоте видно, что функция UpdateGpsCoordinates координаты не выдает, т.к. не соблюдаются условия.

Декомпилировал BlueStacksLocationProvider.apk и изменил так, чтобы координаты запрашивались и устанавливались каждую секунду. Но все равно осталась проблема, что координаты приложениями не определяются в реальном времени, а определяются только в момент запуска, и то после нескольких перезапусков.

Поковырявшись в BlueStacksLocationProvider.apk решил заменить провайдера "network" на "gps". Теперь заработало так, как надо. При изменении координат в реестре они, не более, чем через секунду, обновляются в эмуляторе, и приложения их сразу видят. Правда, в логах появилось ругательство "Provider gps unknown" (4-й скриншот).

В реестре координаты меняются при наличии датчика местоположения (при этом GpsSource становится равным 2). Но функция UpdateGpsCoordinates выдает координаты только, если GpsSource=8. Изменил HD-Frontend.exe таким образом, чтобы координаты из реестра выдавались при GpsSource=2. Получилась такая цепочка:
  1. Мой самописный эмулятор GPS передает координаты в GpsGate.
  2. GpsGate через виртуальный COM-порт выдает координаты виртуальному датчику местоположения GpsDirect.
  3. Bluestacks видит этот датчик и в реальном времени обновляет координаты в реестре.
  4. BlueStacksLocationProvider.apk каждую секунду запрашивает координаты у функции UpdateGpsCoordinates и устанавливает их в качестве текущих.
По такой схеме все заработало! :yes4: 5-й скриншот. Но в Яндекс.Навигаторе вместо дельтаплана - зеленый кружок с буквой Я, который перемещается рывками каждую секунду (6-й скриншот, маленький зеленый кружок - это откуда был рывок).

Для работы этой схемы мне пришлось:
1. Изменить HD-Agent.exe для работы с датчиком местоположения в Win7.
2. Изменить HD-Frontend.exe для выдачи координат из реестра при GpsSource=2.
3. Изменить BlueStacksLocationProvider.apk для увеличения скорости получения и установки координат; так же сменил провайдера с "network" на "gps".

Можно еще попробовать:
  • Увеличить скорость запроса координат до 10 раз в секунду. Но не думаю, что рывки пропадут.
  • Протестировать на реальном GPS-приемнике с датчиком местоположения (например, на VK-172).
Конечно, в идеале было бы неплохо добиться чтения координат в реальном времени из COM-порта или датчика местоположения без промежуточной записи в реестр и чтения оттуда, тем более, что так вроде изначально работает, но плохо...

PS: Долго мучался с тем, что мои изменения, внесенные в HD-Frontend.exe никак не отражались на работе, все работало по старому. В итого выяснил, что вместо моего правленного HD-Frontend.exe запускается скомпилированный (native image) из папки c:\windows\assembly\nativeimages_v2.0.50727_32\hd-frontend\17a65e6ccd86293d8908aa427c0f3d54\hd-frontend.ni.exe
Нашел это с помощью PETools при запущенном Bluestacks. Просто так этот файл и папку удалить нельзя. Пришлось загружаться с LiveCD и уже оттуда удалять.

http://s018.radikal.ru/i506/1510/a1/810a02901c43t.jpg http://s006.radikal.ru/i215/1510/af/9bbe52643999t.jpg http://i016.radikal.ru/1510/51/80ea6c55d89bt.jpg http://s017.radikal.ru/i403/1510/25/3d06cbea1b0ft.jpg http://s019.radikal.ru/i611/1510/c0/e7da61baf8c1t.jpg http://s005.radikal.ru/i212/1510/63/099d774a72bdt.jpg

Уважаемый Lexx , поясните пожалуйста что нужно сделать то в итоге чтоб все правильно работало и gpsbridge продолжал получать координаты после пропадания ? У меня например по-началу при запуске они определеются, потом едешь , хлоп пропали (gpsgate светлозеленый или красный) , потом появились , gpsgate их видит и зеленеет (gps data vith valid position) , а бридж не может их получить (лишь только после рестарта бриджа все продолжает работать)

Lexx09 28.10.2015 02:28

Переехали сюда.

Lexx09 28.10.2015 12:16

Модифицированная GPSBridge для работы с ГЛОНАСС (только ГЛОНАСС!).

sirota 28.10.2015 13:11

Цитата:

Сообщение от Lexx09 (Сообщение 341802)
Модифицированная GPSBridge для работы с ГЛОНАСС (только ГЛОНАСС!).

Спасибо за клаву без геморроя.
А пробовал, как работает отдельно глонас в сравнении и жпс.

Lexx09 28.10.2015 13:23

ГЛОНАСС работает хуже. Пробовал на VK-172.

Lexx09 28.10.2015 21:05

Добавил модифицированную GPSBridge для работы и с GPS и с ГЛОНАСС.

Lexx09 28.10.2015 21:08

Цитата:

Сообщение от vasekbfg (Сообщение 341688)
Уважаемый Lexx , поясните пожалуйста что нужно сделать то в итоге чтоб все правильно работало и gpsbridge продолжал получать координаты после пропадания ? У меня например по-началу при запуске они определеются, потом едешь , хлоп пропали (gpsgate светлозеленый или красный) , потом появились , gpsgate их видит и зеленеет (gps data vith valid position) , а бридж не может их получить (лишь только после рестарта бриджа все продолжает работать)

Что делать - не знаю. У меня, когда GpsGate зеленеет после покраснения - GPSBridge тут-же подхватывает координаты. Не получается сгенерировать ситуацию с отвалом GPSBridge.

Lexx09 28.10.2015 21:13

Цитата:

Сообщение от Krysanov (Сообщение 341660)
Может подскажешь как подстроить громкость блюстака? Вроде выставляю как мне надо, но после пробуждения опять max.. А вообще было бы лучше как в икаре да с "открытыми форточками", если ты понимаешь о чем я!

Не подскажу, нужно разбираться с настройками.

У меня так:
  1. Режим работы микшера iCarDS - автосохранение.
  2. Режим приглушения звука при сообщениях - уменьшение громкости плеера на 50%
  3. Настройки микшера Windows:
    http://s017.radikal.ru/i420/1510/ba/6015eedca416.png

Krysanov 28.10.2015 21:48

Выставить настройки микшера как мне надо - не вопрос, только после пробуждения , опять настройки сбиваются...


Часовой пояс GMT +4, время: 00:14.

Работает на vBulletin® версия 3.8.4.
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Перевод: zCarot