Странный вопрос, но у меня возникли проблемы с поиском рабочего кода кода для геозон для Android. Похоже, есть несколько официальных образцов геозон:
- Устаревшее приложение Android Geofencing
- Пример кода для Kotlin
- Создание и мониторинг геозон
Я унаследовал 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
, кажется, собирается из коробки.