Geofencing示例应用程序无法使用模拟位置

时间:2013-07-10 13:01:52

标签: android gps notifications maps location

问候

我有一台带有谷歌播放服务的ICE Cream sandwitch手机。

从以下位置安装Geofencedetection示例应用程序 http://developer.android.com/training/location/geofencing.html

我还安装了Mock Location应用程序

使用这个模拟位置我将我的位置设置为新德里(纬度28.66长77.21)。

现在我使用示例应用

注册了以下地理围栏

Geofence1     lat 11.94898
    长79.48475
    半径1000米

Geofence2     纬度77.00000     长77.00000     半径1000米

现在我再次打开模拟位置并设置 位于(在地理围栏1内)我的家。     lat 11.94898
    长79.48475

我已使用地图应用程序检查了模拟位置。 它显示正确。我启用了允许模拟位置 在开发者选项中

但样本Geofence应用程序没有触发任何内容 通知。我查了一下代码。按照它应发送的代码 用户输入地理围栏时的通知。

我无法理解它为什么不发送通知。 这只能在真实网络上运行吗?

如果我做错了什么,请告诉我?

最诚挚的问候 jothi

5 个答案:

答案 0 :(得分:2)

我使用

中的示例MockLocation应用程序有类似的经验

http://developer.android.com/training/location/location-testing.html

例如,如果我的地理围栏设置为5,100并且我使用模拟定位应用程序在5,100处注入单个模拟位置,则地理围栏将不会触发。

但是,如果您在5,100处重复注入多个模拟位置,则会触发地理围栏。在我的情况下,连续三次注入模拟位置5,100导致我的地理围栏触发。要明确的是,当我说注射时,我的意思是:

mLocationClient.setMockLocation(yourMockLocation);

以下所有内容对我来说都是纯粹的猜测,所以请耐心等待: 我的推测是,在LocationClient后端有一些过滤算法,其目的是过滤掉虚假的传感器值,并且它可能检测到lat / long的巨大变化作为可能的虚假值。另一种可能性是地理围栏只是在接收到多个读数表明你在附近时才会触发。

答案 1 :(得分:1)

请在应用程序处于前台时检查应用程序的通知,因为我也没有在后台获得地理围栏的任何更新。但在前景中,它运作良好。

答案 2 :(得分:1)

我一直坚持这个问题。然后最终结果是谷歌模拟位置教程(http://developer.android.com/training/location/location-testing.html)没有提到你将需要在你创建的模拟位置下面设置两个调用:

    /*
        setElapsedRealtimeNanos() was added in API 17
     */
    if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN_MR1) {
        newLocation.setElapsedRealtimeNanos(SystemClock.elapsedRealtimeNanos());
    }
    newLocation.setTime(System.currentTimeMillis());

如果没有这两个电话,我的模拟位置将不会触发我的地理围栏。在调用这些之后,我的地理围栏被触发而没有问题。

答案 3 :(得分:0)

我也有类似MockLocation应用程序的经验,只需在“发送间隔”字段上使用大量秒数,例如7秒,地理围栏就会触发。

答案 4 :(得分:0)

花了大量时间后,我终于发现秘密是使用提供商名称" network"在创建模拟位置实例时。

Location location = new Location("network");