4

问候

我有一部带有谷歌播放服务的冰淇淋三明治手机。

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

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

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

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

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

Geofence2 纬度 77.00000 长 77.00000 半径 1000 米

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

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

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

我不明白为什么它不发送通知。这只适用于真实网络吗?

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

最好的问候乔蒂

4

5 回答 5

2

我使用来自的示例 MockLocation 应用程序也有类似的经历

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

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

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

mLocationClient.setMockLocation(yourMockLocation);

下面的一切都是我的纯粹猜测,所以请谨慎对待:我的猜测是 LocationClient 后端有一些过滤算法,其目的是过滤掉虚假的传感器值,它可能会检测到纬度/经度的巨大变化作为可能的虚假值。另一种可能性是地理围栏在收到多个读数表明您在其附近时才会触发。

于 2013-10-26T08:54:44.337 回答
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());

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

于 2014-11-25T22:40:37.240 回答
1

当应用程序在前台时,请检查应用程序的通知,因为我也没有在后台获得任何地理围栏的更新。但在前台,它工作正常。

于 2013-07-14T12:23:47.253 回答
0

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

Location location = new Location("network");
于 2014-09-29T21:29:26.760 回答
0

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

于 2014-04-09T21:11:12.757 回答