Где я могу найти образец кода для устаревшей геозоны для Android Studio 3.3? - PullRequest
0 голосов
/ 15 января 2019

Странный вопрос, но у меня возникли проблемы с поиском рабочего кода кода для геозон для Android. Похоже, есть несколько официальных образцов геозон:

  1. Устаревшее приложение Android Geofencing
  2. Пример кода для Kotlin
  3. Создание и мониторинг геозон

Я унаследовал Java-приложение, поэтому # 2 не работает для меня. С # 3 у меня были некоторые ошибки сборки, пока я не добавил следующее в мой файл gradle.properties:

android.useAndroidX=true
android.enableJetifier=true

При работающей сборке я попытался запустить приложение на эмуляторе с Pixel 2 API 28. Я вошел в магазин Play, включил «Точность определения местоположения Google», включил сканирование как по Wi-Fi, так и по Bluetooth и получил следующие журналы :

2019-01-14 23:38:43.597 25221-25221/? I/mple.geofencin: Not late-enabling -Xcheck:jni (already on)
2019-01-14 23:38:43.636 25221-25221/? W/mple.geofencin: Unexpected CPU variant for X86 using defaults: x86
2019-01-14 23:38:44.134 25221-25221/com.google.android.gms.location.sample.geofencing W/mple.geofencin: Accessing hidden method Landroid/view/View;->computeFitSystemWindows(Landroid/graphics/Rect;Landroid/graphics/Rect;)Z (light greylist, reflection)
2019-01-14 23:38:44.135 25221-25221/com.google.android.gms.location.sample.geofencing W/mple.geofencin: Accessing hidden method Landroid/view/ViewGroup;->makeOptionalFitsSystemWindows()V (light greylist, reflection)
2019-01-14 23:38:44.328 25221-25221/com.google.android.gms.location.sample.geofencing I/MainActivity: Requesting permission
2019-01-14 23:38:44.393 25221-25221/com.google.android.gms.location.sample.geofencing D/OpenGLRenderer: Skia GL Pipeline
2019-01-14 23:38:44.470 25221-25254/com.google.android.gms.location.sample.geofencing I/ConfigStore: android::hardware::configstore::V1_0::ISurfaceFlingerConfigs::hasWideColorDisplay retrieved: 0
2019-01-14 23:38:44.470 25221-25254/com.google.android.gms.location.sample.geofencing I/ConfigStore: android::hardware::configstore::V1_0::ISurfaceFlingerConfigs::hasHDRDisplay retrieved: 0
2019-01-14 23:38:44.471 25221-25254/com.google.android.gms.location.sample.geofencing I/OpenGLRenderer: Initialized EGL, version 1.4
2019-01-14 23:38:44.471 25221-25254/com.google.android.gms.location.sample.geofencing D/OpenGLRenderer: Swap behavior 1
2019-01-14 23:38:44.471 25221-25254/com.google.android.gms.location.sample.geofencing W/OpenGLRenderer: Failed to choose config with EGL_SWAP_BEHAVIOR_PRESERVED, retrying without...
2019-01-14 23:38:44.472 25221-25254/com.google.android.gms.location.sample.geofencing D/OpenGLRenderer: Swap behavior 0
2019-01-14 23:38:44.484 25221-25254/com.google.android.gms.location.sample.geofencing D/EGL_emulation: eglCreateContext: 0xe14051e0: maj 3 min 0 rcv 3
2019-01-14 23:38:44.505 25221-25254/com.google.android.gms.location.sample.geofencing D/EGL_emulation: eglMakeCurrent: 0xe14051e0: ver 3 0 (tinfo 0xe1403660)
2019-01-14 23:38:44.679 25221-25254/com.google.android.gms.location.sample.geofencing D/EGL_emulation: eglMakeCurrent: 0xe14051e0: ver 3 0 (tinfo 0xe1403660)
2019-01-14 23:38:47.961 25221-25221/com.google.android.gms.location.sample.geofencing I/MainActivity: onRequestPermissionResult
2019-01-14 23:38:47.961 25221-25221/com.google.android.gms.location.sample.geofencing I/MainActivity: Permission granted.
2019-01-14 23:38:53.437 25221-25254/com.google.android.gms.location.sample.geofencing D/EGL_emulation: eglMakeCurrent: 0xe14051e0: ver 3 0 (tinfo 0xe1403660)
2019-01-14 23:38:53.442 25221-25254/com.google.android.gms.location.sample.geofencing D/EGL_emulation: eglMakeCurrent: 0xe14051e0: ver 3 0 (tinfo 0xe1403660)
2019-01-14 23:40:18.152 25221-25241/com.google.android.gms.location.sample.geofencing I/AssistStructure: Flattened final assist data: 1928 bytes, containing 1 windows, 16 views
2019-01-14 23:40:20.314 25221-25254/com.google.android.gms.location.sample.geofencing D/EGL_emulation: eglMakeCurrent: 0xe14051e0: ver 3 0 (tinfo 0xe1403660)

Даже после изменения местоположения на эмулятор SFO / GOOGLE в эмуляторе не было никаких уведомлений. Я добавил оператор печати в onHandleWork в GeofenceTransitionsJobIntentService, но похоже, что никаких событий геозоны не было.

Я также попробовал на реальном устройстве Pixel с Fake GPS; уведомлений тоже нет. Итак, мой вопрос: какой пример кода мы должны использовать для геозон? Это должно работать на эмуляторе? Работает ли это на реальном телефоне, если я переключаю приложение в фоновый режим, чтобы изменить местоположение в приложении Fake GPS?

PS: на моем эмуляторе включен Google Play PPS: Я тоже попробовал это приложение XYZ Tourist Attractions; Я мог видеть изменение расстояний, когда я изменил местоположение GPS через эмулятор, но все еще никаких уведомлений. Я не слишком углубился в это, хотя. PPPS: Пожалуйста, помогите!

Обновление 1:

  • Я получаю события переходов геозоны ... но только если Google карты работает на переднем плане. Я не уверен, что это потому, что Я устанавливаю местоположение через эмулятор ...
  • Разрыв сборки (3), похоже, регресс в репозитории googlesamples из обновления 5 дней назад. Коммит 432d3b72b8c058f220416958b444274ddd186abd, кажется, собирается из коробки.

1 Ответ

0 голосов
/ 28 января 2019

Я работал с GeoFence в течение столь длительного времени, у меня был один и тот же вопрос, и я сам получил ответ, попробовав различные решения. Поэтому, в основном, GeoFence получает триггеры, только если какое-либо приложение в телефоне выбирает местоположение для некоторая продолжительность х. Если вы протестируете пример приложения GeoFence, предоставленного Google, то увидите, что приложение работает только при открытии приложения карт Google, потому что Google Maps - единственное приложение на устройстве, которое пассивно запрашивает местоположения.

Для Prove вы можете клонировать образец GeoFence и образец LocationUpdateForGroundService по этой ссылке ниже https://github.com/googlesamples/android-play-location Запустите оба GeoFence и LocationUpdateForGroundService одновременно, вы заметите, изменив lat и long из эмулятора, который сейчас Вам больше не нужно открывать карты Google, потому что теперь есть другое приложение, запрашивающее местоположение.

Итак, создайте службу переднего плана в приложении GeoFence и используйте Fuse Location Client для запроса обновлений местоположения в течение некоторого времени.

...