1

我目前正在我的应用程序上注册一个位置围栏,类似于文档中的解释。使用日志,我可以看到注册回调和广播接收器被正确调用。但是,如果我重新运行应用程序,这些都不会被触发。重新启动我的手机后,它再次工作。

我没有取消注册围栏,因为我希望即使在后台也能触发围栏(接收器未绑定到活动)。

¿ 即使在应用程序开发过程中多次重新运行应用程序,我如何才能使其正常工作?¿ 当用户重新安装或更新应用程序时,如何确保正确注册围栏?

我创建AwarenessFence使用

AwarenessFence allLocations = AwarenessFence.or(locationFences);

像这样创建locationFences的对象集合在哪里LocationFence

singleLocationFence = LocationFence.entering(latitude, longitude, FENCE_RADIUS); 
4

2 回答 2

1

我已经在服务中完成了围栏处理,并且由于服务可以在后台运行,所以它工作正常。如果调用了“onDestroy”,我曾经取消注册栅栏,因此操作系统将不再需要观察这些栅栏。该服务还解决了您的“重新运行”问题,因为它一次只能在服务中。

你的下一点与

AwarenessFence allLocations = AwarenessFence.or(locationFences);

它的工作,我用TimeFence试了一下

AwarenessFence allLocations = AwarenessFence.or(TimeFence.inInterval(new Date()), Long.MAX_VALUE));

但是更好用

AwarenessFence allLocations = locationFences;

因为 AwarenessFence 是构成 Awareness API 的所有 BeaconFence、Geofence、TimeFencee (...) 的父级。

于 2016-08-23T14:33:09.927 回答
0

我了解到,在您使用 Awareness API 注册围栏后,即使您重新运行应用程序,或者如果应用程序在后台,您也希望收到回调。这个问题没有澄清这一点,但我相信如果您正在关注文档,那么您就是在动态注册广播接收器。

您可以通过在清单文件中添加类似这样的内容来对广播接收器进行静态注册来实现您的目标:

<receiver android:name="MyReceiver">
    <intent-filter>
        <action android:name="android.intent.action.BOOT_COMPLETED">
       </action>
    </intent-filter>
</receiver>

这样,您无需在 onDestroy() 中取消注册接收器,并且如果您已注册围栏,您的应用将获得围栏回调,即使应用已停止或更新。

于 2017-01-28T00:49:36.483 回答