在谷歌的地理围栏教程中没有看到地理围栏转换的内容

7
我正在尝试使用Google的示例:创建和监视地理围栏来测试地理围栏功能。我已经上传了代码
问题是我从未收到进入或退出的通知。我已经开启了WiFi、4G和GPS。我尝试了以下测试方法:
  1. 我甚至走出房子大约50英尺,然后再走回来 - 但没有通知。我可以看到Play服务已连接,甚至"MainActivity.java中的GeofenceUtils.ACTION_GEOFENCES_ADDED"被触发,所以我认为地理围栏已经正确添加。
  2. 在设置中启用了模拟位置,并使用了Fake GPS App更改了位置 - 从与Geofence1相同的坐标开始,然后设置为完全位于外部(另一个州)的位置 - 但我仍然没有收到退出通知。
我做错了什么?有人成功运行过这个Google的示例:创建和监控地理围栏吗?我上传了代码以便浏览。
我只是想学习地理围栏-检测进入和退出。 我将标记任何可以帮助我在真实设备上使地理围栏工作的答案为正确答案

I enter the coordinates and radius below.


1
实际上,Android示例代码中存在一个错误。您不应该使用IntentService类来进行通知和转换。请将其替换为BroadCastReceiver。同样的问题在这里发布了-https://dev59.com/I2Ik5IYBdhLWcg3wMLiI - Pankaj
你能告诉我你是如何解决这个问题的吗? - Hunt
我没有这样做,这就是为什么我没有将下面的答案标记为正确答案。我需要在某个时候重新审视这个问题...抱歉。如果你找到了解决方法,如果你能发布一个解决方案,那就太棒了。 - user1406716
@user1406716 你解决问题了吗? - Hunt
@Hunt 不好意思,我的运气不太好,可能将来我会回到这个问题。如果有更新,我会在这里通知的。 - user1406716
3个回答

17

我也遇到了示例代码的问题。其中一个主要问题是在声明ReceiveTransitionsIntentService时。您不需要添加BroadcastReceiver或请求位置更新,但您需要更改AndroidManifest将导出值设置为true,如下所示:

<service
    android:name=".ReceiveTransitionsIntentService"
    android:exported="true" >
</service>

确保服务路径正确。

我已经大幅简化了Google的示例,你可以在这里找到代码和解释。我已经移除了UI组件和持久性Geofence存储,因此这个例子应该更容易理解。希望这会有所帮助!


嘿,你的博客真的很有帮助,谢谢。不过我认为那里有一个错误 - 在清单部分中列出了<service .. android:exported="false"。我想你的意思是true。谢谢! - Steven
非常感谢您的博客文章! - Oliver Hoffman
@mari 我不明白这可能有什么不同?我的意思是,我已经尝试过了,但没有成功。 - IgorGanapolsky
这是一个很好的答案...将android:exported="true"设置为固定值解决了问题。 - Thilina H
我同意其他帖子的观点。这是正确的答案。Android Studio在创建IntentService时会添加android:exported="false"。你需要进入清单文件并将其更改为true。这个答案应该被标记为解决方案。 - Michel
太棒了。非常感谢@mari。 - prijupaul

0

最初我的代码运行得很顺畅,但之后我也遇到了这个问题,请尝试通过修改continueAddGeofences()函数中的geofenceRequester类来解决它。基本上是通过位置请求方法调用接收器。

 private void continueAddGeofences() {


            // Get a PendingIntent that Location Services issues when a geofence
            // transition occurs
            mGeofencePendingIntent = createRequestPendingIntent();

            // Send a request to add the current geofences
            mLocationClient.addGeofences(mCurrentGeofences, mGeofencePendingIntent,
                    this);
            //mLocationRequest.setPriority(LocationRequest.PRIORITY_HIGH_ACCURACY);

            try {
                LocationRequest locationrequest = LocationRequest.create();
                locationrequest.setPriority(locationrequest.PRIORITY_HIGH_ACCURACY);
                 locationrequest.setInterval(3000);


                mLocationClient.requestLocationUpdates(locationrequest, mGeofencePendingIntent);
            } catch (Exception e) {
                e.printStackTrace();
            }

我曾经收到过通知,但无法再次收到。你是如何测试你的应用程序的?你使用模拟位置应用程序还是真正走出地理围栏坐标?你走了多远? - user1406716
我实际上正在远离地理围栏坐标,并且远离的距离取决于您所设定的半径,我已经设定了10米的半径。 - Priya
半径为5米或10米对您是否有效?当您进入和离开时,您会看到单独的通知显示进入和退出吗? - user1406716
@SpunkyPriya,我需要在BroadcastReceiver中更改什么吗? - Hunt
在真实设备上 @IgorGanapolsky - Priya
显示剩余2条评论

0

我之前也遇到了Geofence API的同样问题。最后,我使用了LocationManager的addProximityAlert方法,它非常有效!


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接