在哪里可以找到适用于 Android Studio 3.3 的未弃用地理围栏示例代码?
Posted
技术标签:
【中文标题】在哪里可以找到适用于 Android Studio 3.3 的未弃用地理围栏示例代码?【英文标题】:Where can I find a non-deprecated geofence sample code for Android Studio 3.3? 【发布时间】:2019-06-09 05:10:16 【问题描述】:要问的问题很奇怪,但我在为 android 上的地理围栏找到有效的代码示例时遇到了麻烦。看起来有一些官方的地理围栏示例:
-
Deprecated Android Geofencing app
Sample code for Kotlin
Creating and Monitoring Geofences
我继承了一个 Java 应用程序,所以 #2 不适合我。使用 #3,在我将以下内容添加到我的 gradle.properties 文件之前,我遇到了一些构建失败:
android.useAndroidX=true
android.enableJetifier=true
随着构建工作,我尝试使用 Pixel 2 API 28 在模拟器上运行该应用程序。我登录了 Play 商店,将“Google 位置准确性”切换为 ON,启用了 Wifi 和蓝牙扫描并收到以下日志:
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 后,模拟器上也没有通知。我在GeofenceTransitionsJobIntentService
中的onHandleWork
添加了一个打印语句,但看起来没有触发任何地理围栏事件。
我还尝试使用带有 Fake GPS 的真实 Pixel 设备;也没有通知。所以,我的问题是我们应该为地理围栏使用什么示例代码?它应该在模拟器上工作吗?如果我将应用程序切换到后台以更改 Fake GPS 应用程序中的位置,它是否可以在真机上运行?
PS:我的模拟器图像已启用 Google Play PPS:我也试过这个 XYZ Tourist Attractions 应用程序;当我通过模拟器更改 GPS 位置时,我可以看到距离发生了变化,但仍然没有通知。不过,我并没有深入研究这一点。 PPPS:请帮忙!
更新 1:
我确实收到了地理围栏转换事件.. 但前提是 Google 地图正在前台运行。我不确定这是不是因为 我正在通过模拟器设置位置... (3) 中的构建中断似乎是 googlesamples 存储库中 5 天前更新的回归。提交432d3b72b8c058f220416958b444274ddd186abd
似乎是开箱即用的。
【问题讨论】:
【参考方案1】:我使用 GeoFence 已经很长时间了,我有同样的问题,在尝试不同的解决方案后我自己得到了答案,所以基本上,如果手机中的任何应用程序正在获取位置,GeoFence 才会触发一些 x 持续时间。如果您测试 google 提供的 GeoFence 示例应用程序,您会发现该应用程序仅在您打开 Google 地图应用程序时才有效,这是因为 Google 地图是设备中唯一被动请求位置的应用程序。
为了证明,您可以从下面的链接https://github.com/googlesamples/android-play-location 克隆 GeoFence 示例和 LocationUpdateForGroundService 示例@同时运行它们 GeoFence 和 LocationUpdateForGroundService,您会注意到通过从模拟器中更改纬度和经度,现在您不需要再次打开谷歌地图,因为现在有另一个应用程序正在请求位置。
因此,请在 GeoFence 应用程序中创建前台服务,并使用 Fuse Location Client 请求位置更新一段时间。
【讨论】:
非常感谢您的回答。我意识到只有在谷歌地图运行时才会触发地理围栏。奇怪的是,他们的地理围栏样本没有明确告诉您这一点。我必须创建后台服务来处理位置请求,但似乎 [本教程] (codelabs.developers.google.com/codelabs/…) 已经涵盖了我。 是的,他们在任何地方都没有提到这个重要信息。 Google 文档是寻找工作代码或有意义的解释的最糟糕的地方。但是,如果您正在寻找过时和无法工作的代码以及大量缺失的信息,那就太好了。以上是关于在哪里可以找到适用于 Android Studio 3.3 的未弃用地理围栏示例代码?的主要内容,如果未能解决你的问题,请参考以下文章
我已经下载了 Visual Studio Community 2013。但我没有找到适用于 android 和 ios 应用程序的选项。
我在哪里可以获得适用于 ADT 的功能性 Wi-Fi Direct 演示 Android 应用程序项目?
适用于 Windows Phone 8 的 Visual Studio Express 2012 - 它在哪里?