围栏未注册 - google 意识 API
Fences not registering - google awareness API
我目前正在我的应用程序上注册位置围栏,类似于 documentation 上的解释。使用日志,我可以看到正在正确调用注册回调和广播接收器。但是,如果我重新 运行 应用程序,这些不会被触发。重新启动我的 phone 后,它再次工作。
我没有取消注册围栏,因为我希望即使在后台也能发射围栏(接收器未绑定到 Activity)。
¿即使我在应用程序开发过程中多次重新 运行 应用程序,我如何才能使它正常工作? ¿如何确保在用户重新安装或更新应用程序时正确注册围栏?
我使用
创建 AwarenessFence
AwarenessFence allLocations = AwarenessFence.or(locationFences);
其中 locationFences
是这样创建的 LocationFence
个对象的集合
singleLocationFence = LocationFence.entering(latitude, longitude, FENCE_RADIUS);
我已经在服务中完成了围栏处理,因为服务可以 运行 在后台工作,所以工作正常。如果 "onDestroy" 被调用,我曾经取消注册围栏,所以操作系统将不再需要观察这些围栏。
该服务还解决了您的 "rerun"-问题,因为它一次只能提供服务。
你的下一个观点
AwarenessFence allLocations = AwarenessFence.or(locationFences);
它的工作原理,我用 TimeFence
试过了
AwarenessFence allLocations = AwarenessFence.or(TimeFence.inInterval(new Date()), Long.MAX_VALUE));
但更好用
AwarenessFence allLocations = locationFences;
因为 AwarenessFence 是所有 BeaconFence、Geofence、TimeFencee 的父级,(...) 形成了 Awareness API。
我了解到,在您使用 Awareness API 注册 fences 之后,即使您 re-run 应用程序,或者如果应用程序在后台,您也希望收到回调。
这个问题没有澄清这一点,但我相信如果你正在关注文档,你正在注册 broadcastreceiver dynamically.
您可以通过添加 something like this in the manifest file:
对您的广播接收器进行静态注册来达到您的目的
<receiver android:name="MyReceiver">
<intent-filter>
<action android:name="android.intent.action.BOOT_COMPLETED">
</action>
</intent-filter>
</receiver>
这样,您就不需要在 onDestroy() 中注销接收器,如果您注册了围栏,您的应用程序将获得围栏回调,即使应用程序已停止或更新。
我目前正在我的应用程序上注册位置围栏,类似于 documentation 上的解释。使用日志,我可以看到正在正确调用注册回调和广播接收器。但是,如果我重新 运行 应用程序,这些不会被触发。重新启动我的 phone 后,它再次工作。
我没有取消注册围栏,因为我希望即使在后台也能发射围栏(接收器未绑定到 Activity)。
¿即使我在应用程序开发过程中多次重新 运行 应用程序,我如何才能使它正常工作? ¿如何确保在用户重新安装或更新应用程序时正确注册围栏?
我使用
创建AwarenessFence
AwarenessFence allLocations = AwarenessFence.or(locationFences);
其中 locationFences
是这样创建的 LocationFence
个对象的集合
singleLocationFence = LocationFence.entering(latitude, longitude, FENCE_RADIUS);
我已经在服务中完成了围栏处理,因为服务可以 运行 在后台工作,所以工作正常。如果 "onDestroy" 被调用,我曾经取消注册围栏,所以操作系统将不再需要观察这些围栏。 该服务还解决了您的 "rerun"-问题,因为它一次只能提供服务。
你的下一个观点
AwarenessFence allLocations = AwarenessFence.or(locationFences);
它的工作原理,我用 TimeFence
试过了AwarenessFence allLocations = AwarenessFence.or(TimeFence.inInterval(new Date()), Long.MAX_VALUE));
但更好用
AwarenessFence allLocations = locationFences;
因为 AwarenessFence 是所有 BeaconFence、Geofence、TimeFencee 的父级,(...) 形成了 Awareness API。
我了解到,在您使用 Awareness API 注册 fences 之后,即使您 re-run 应用程序,或者如果应用程序在后台,您也希望收到回调。 这个问题没有澄清这一点,但我相信如果你正在关注文档,你正在注册 broadcastreceiver dynamically.
您可以通过添加 something like this in the manifest file:
对您的广播接收器进行静态注册来达到您的目的<receiver android:name="MyReceiver">
<intent-filter>
<action android:name="android.intent.action.BOOT_COMPLETED">
</action>
</intent-filter>
</receiver>
这样,您就不需要在 onDestroy() 中注销接收器,如果您注册了围栏,您的应用程序将获得围栏回调,即使应用程序已停止或更新。