Тестирование геозоны с сервисами Google Play 6.5.+

Я тестировал API геозоны, доступный в последних сервисах Google Play, используя официальный образец, доступный здесь: https://github.com/googlesamples/android-Geofencing/ И, конечно же, следуя курсу обучения: http://developer.android.com/training/location/geofencing.html

В примере отображается уведомление, когда вы приближаетесь к двум зданиям Google в Сан-Франциско, поэтому я настроил его так, чтобы оно срабатывало, когда я приближаюсь к своему дому или месту работы.

Если я использую реальное устройство, оно работает. Уведомления запускаются корректно. Но когда я использую симулятор и меняю местоположение с помощью telnet или ddms, ничего не происходит. Я также пробовал с Genymotion, с установленными Gapps, и то же самое: ничего.

Кто-нибудь может подсказать, как протестировать геозону, не двигая задницей? Потому что на улице нет возможности отлаживать код...


person Redwarp    schedule 13.03.2015    source источник
comment
Лол, на самом деле не двигая моей задницей?   -  person Reed    schedule 27.03.2015
comment
Вы пробовали издеваться над своим местоположением? Я рекомендую два приложения: Фальшивое местоположение GPS и Фальшивый спуфер местоположения бесплатно (второй работает нормально с сервисами Google Play).   -  person Ziem    schedule 29.03.2015
comment
Что ж, использование поддельного местоположения GPS или другого мокера местоположения не поможет мне протестировать все, потому что даже если оно работает (нужно попробовать), оно требует переключения приложения, и это означает, что я не могу проверить, что происходит с моим приложением на переднем плане.   -  person Redwarp    schedule 30.03.2015
comment
@Redwarp Проверьте мой ответ и, пожалуйста, отметьте его как ответ, чтобы, если у кого-то еще возникла такая же проблема, он мог ее увидеть.   -  person Sid    schedule 01.04.2015
comment
@Assa Я не думаю, что ваш ответ - это тот ответ, который я ищу, и я не думаю, что toobsco42 был бы рад, если бы я дал вам награду в 400 баллов за такой короткий ответ. Насмешливое местоположение, кажется, работает. Но это не вызывает геозону   -  person Redwarp    schedule 01.04.2015
comment
@Redwarp то, что ты говоришь, это совсем неправда! Обычно приложения с поддельным местоположением запускают службу, которая подделывает ваши местоположения, поэтому вы можете протестировать свое приложение на переднем плане просто отлично! Например, с помощью LocationSpoofer Pro вы можете подделать маршрут. между двумя координатами!   -  person user347187    schedule 02.04.2015
comment
@philtz приятно знать, я попробую.   -  person Redwarp    schedule 08.12.2015


Ответы (6)


Вот что вам нужно сделать:

  1. Настройки -> Параметры разработчика -> Разрешить фиктивные местоположения

  2. Добавьте следующее разрешение:

<uses-permission android:name="android.permission.ACCESS_MOCK_LOCATION" />

  1. Убедитесь, что ваша служба определения местоположения GPS включена (высокая точность), а не сетевое местоположение.

  2. Загрузите приложение под названием Fake GPS (у него желтый счастливый факт, что он держит пульт дистанционного управления) из магазина приложений. Вы можете установить свой поддельный GPS с помощью этого приложения.

Надеюсь, это ответит на ваш вопрос :)

person Snake    schedule 02.04.2015
comment
Ваш ответ в основном такой же, как и у @araks, и он дает более подробную информацию ^_^ все равно спасибо. - person Redwarp; 02.04.2015
comment
Он только упомянул пункт 4 через adb. Я хотел убедиться, что у вас все настроено и вам не нужно проходить через adb ... Думаю, вы не пробовали мой ответ и не нашли его полезным. Ok - person Snake; 02.04.2015
comment
О, извините, я не хотел показаться резким или что-то в этом роде, любая помощь приветствуется, правда. Просто хотел объяснить, почему я бы не выбрал ваш ответ как единственный. - person Redwarp; 03.04.2015
comment
Не беспокойся.. Понял. Offcourse выбрать ответ, который решает вашу проблему. Удачи - person Snake; 04.04.2015
comment
Эти шаги сработали для меня, легко забыть включить шаг в настройку. Однако я использовал Lockito, как уже упоминалось. У Lockito есть постоянное уведомление, поэтому я могу запустить свое приложение на переднем плане, опустить панель уведомлений и нажать «Воспроизвести» в уведомлении Lockito, чтобы запустить симулированный маршрут. Мое приложение на переднем плане прекрасно видит движение. - person Robert; 17.09.2015
comment
Хорошо, это для тестирования геозоны на реальном устройстве, что на самом деле лучше для моего случая. Tnx. - person Dezo; 04.08.2019

У меня была такая же проблема, если у вас есть устройство, вы можете легко подделать местоположение, включив фиктивное местоположение в настройках

Настройки-> Параметры разработчика-> Разрешить фиктивные местоположения

И вы также должны добавить это в манифест:

 <uses-permission android:name="android.permission.ACCESS_MOCK_LOCATION" /> 

Я никогда не пробовал на эмуляторе, но попробуйте открыть эмулятор и сделать то же самое (зайти в настройки и включить фиктивные локации), удачи!

person Sid    schedule 30.03.2015
comment
Итак, я понимаю, что вы можете разрешить фиктивные местоположения в параметрах разработчика, но как вы имитируете что-то вроде маршрута gpx на устройстве? - person toobsco42; 30.03.2015
comment
Как проверить это в дозированном режиме? - person Rohit; 01.10.2018
comment
при добавлении разрешения на фиктивное местоположение я получаю следующую ошибку: Разрешение предоставляется только системным приложениям. - person Rule; 17.01.2019
comment
@Rule вы должны переопределить манифест в папке отладки или тестирования и включить разрешение в манифест этого варианта сборки. Из Android Studio: фиктивные местоположения следует запрашивать только в тестовом или специфичном для отладки файле манифеста (обычно src/debug/AndroidManifest.xml). - person Payne Miller; 21.02.2019

Приложение Lockito помогает смоделировать маршрут для тестирования Geofencing. https://play.google.com/store/apps/details?id=fr.dvilleneuve.lockito

Вам нужно включить разрешение фиктивных местоположений Настройки-> Параметры разработчика-> Разрешить фиктивные местоположения

Я обнаружил, что вы можете установить среднюю скорость вдоль маршрута, чтобы ускорить симуляцию, однако, если скорость слишком высока, то Geofencing вход и выход могут не срабатывать или срабатывать намного позже, чем должны. Я также установил радиус геозоны не менее 40 метров, чтобы убедиться, что триггеры сработали.

С Lockito, если вы установите слишком высокую скорость, текущее местоположение (синяя точка на карте) не будет обновляться достаточно быстро. Поэтому сначала установите его на более низкую скорость, затем бегите, затем увеличьте скорость и бегите.

person toobsco42    schedule 31.03.2015
comment
Lockito ломает геозону в новейших версиях Google Play - person desgraci; 25.11.2016
comment
@desgraci это правда, когда я нажимаю «Воспроизвести маршрут», мои геозоны удаляются, и я получаю вызов GEOFENCE_NOT_AVAILABLE. Мне пришлось перейти на другое приложение Fake GPS (play.google. com/store/apps/details?id=com.lexa.fakegps) - person Mateus Gondim; 01.12.2016
comment
@MateusGondim у меня это не сработало, так как для этого требуется переключение приложений, и мне нужно было протестировать на переднем плане, но спасибо :) - person desgraci; 02.12.2016

Я чуть не бросил тестировать геозоны...

фактически не двигая моей задницей

... но в результате интенсивных исследований я нашел решение (хотя и не оптимальное).

Проблема с геозонами, в отличие от регулярных обновлений местоположения, заключается в том, что геозонам нужно немного «тыкать», чтобы работать.

Геозоны полагаются на другие приложения и ОС. Если нет приложения, которое активно запрашивает обновления местоположения, а система Android «думает», что оно находится в одном и том же месте (это всегда так с эмулятором), заборы не сработают.

Итак, есть два решения:

  • активно запрашивать обновления местоположения во время отладки

  • откройте карты Google в многооконном режиме и нажмите кнопку «моя позиция» после того, как вы ввели широту / долготу и нажали «Отправить» в настройках эмулятора.

Конечно, требуются вещи, упомянутые в других ответах (высокая точность).

Я надеюсь, что этот ответ сэкономит время другим разработчикам :)

person Appyx    schedule 20.02.2018
comment
Это тот, который работал для меня! Мне пришлось войти в приложение Google Maps, а затем запросить обновление местоположения, нажав кнопку «моя позиция». - person Hashim Akhtar; 16.08.2019

Я два дня пытался понять, как протестировать мое приложение геозоны на эмуляторе Android Studio, и наконец сделал это. На устройстве были сервисы Play по умолчанию (я имею в виду, что я создал с ним виртуальное устройство).

Я решил эту проблему, перейдя в "Настройки Google" > "Местоположение" > "Режим".

И изменить его с "Только устройство" на "Высокая точность".

Таким образом, мое приложение наконец заработало. Надеюсь, поможет.

person algarrobo    schedule 23.08.2015

Я обнаружил, что самый простой способ установить фиктивное местоположение в эмуляторе Android — использовать небольшое приложение, предназначенное для этой цели.

При тестировании приложений с функциями определения местоположения я использую фальшивое местоположение GPS< /а>.

Вы можете загрузить apk с зеркала (поищите в Google com.lexa.fakegps.apk), а затем установить его на эмулятор с помощью:

adb install com.lexa.fakegps.apk

Работает как часы. Никогда не было больше проблем с установкой поддельного местоположения, как с telnet или DDMS, и это намного проще, поскольку вы можете использовать простой GUI вместо команд терминала!

РЕДАКТИРОВАТЬ: Если вам нужно автоматически установить местоположение в ваших модульных тестах, вы можете использовать эти намерения:

Intent startIntent = new Intent();
startIntent.setAction("com.lexa.fakegps.START");
startIntent.putExtra("lat", 56.1234);
startIntent.putExtra("long", 44.0011);
startService(startIntent);

Intent stopIntent = new Intent();
stopIntent.setAction("com.lexa.fakegps.STOP");
startService(stopIntent);

Приятного вам тестирования!

Маттиа

person araks    schedule 02.04.2015