地理围栏示例应用与模拟位置不兼容。

4

问候

我有一台安装了谷歌应用服务的冰淇淋三明治手机。

从以下网址http://developer.android.com/training/location/geofencing.html安装了Geofencedetection示例应用程序。

我还安装了一个模拟位置应用程序。

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

现在,我使用示例应用程序注册了以下地理围栏:

地理围栏1 纬度11.94898
经度79.48475
半径1000米

地理围栏2 纬度77.00000 经度77.00000 半径1000米

现在,我再次打开模拟位置,并将位置设置为(在地理围栏1内)我的家。 纬度11.94898
经度79.48475

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

但是示例地理围栏应用程序没有触发任何通知。我检查了代码。根据代码,当用户进入地理围栏时,它应该发送通知。

我不明白为什么它没有发送通知。这只能在真实网络上工作吗?

请告诉我是否有任何错误操作?

最好的祝愿 jothi

5个回答

2
我曾使用示例MockLocation应用程序,来自http://developer.android.com/training/location/location-testing.html。例如,如果我的地理围栏设置在5,100处,并使用模拟位置应用程序注入单个模拟位置在5,100处,则地理围栏不会触发。但是,如果您重复注入多个模拟位置在5,100处,则地理围栏将触发。在我的情况下,连续三次在5,100处注入模拟位置会导致我的地理围栏触发。要明确的是,当我说注入时,我的意思是执行以下操作:
mLocationClient.setMockLocation(yourMockLocation);

以下所有内容纯属猜测,因此请谨慎对待:

我的猜测是LocationClient后端存在一些过滤算法,其目的是过滤掉虚假的传感器值,并且它可能会检测到纬度/经度的巨大变化作为可能的虚假值。另一个可能性是,只有在接收到多个指示您在其附近的读数后,地理围栏才会触发。


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());

没有这两个调用,我的模拟位置就无法触发我的地理围栏。调用了这些后,我的地理围栏可以正常触发。

1
请在应用程序前台时检查应用程序的通知,因为我在后台也没有收到地理围栏的更新。但是在前台,它可以正常工作。

0

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


0

在花费了大量时间后,我终于发现创建模拟位置实例时使用的提供程序名称是“network”。

Location location = new Location("network");

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