【发布时间】:2013-12-03 11:58:48
【问题描述】:
我正在编写一个应用程序,当有人在安装应用程序的整个生命周期内进入/退出多个站点时,它需要使用地理围栏。
我的地理围栏实现(与下面的第二个链接非常相似)在我第一次安装应用程序时一切正常,无论是在移入/移出地理围栏时还是在使用模拟位置来模拟它时,直到设备重新启动.
在重新启动时,无论是模拟位置还是实际进出地理围栏似乎都不会触发事件并将未决意图触发到我的广播接收器。
我查看了以下三个链接,并且还阅读了相当多的文档,但我无法在任何地方找到明确的答案,直接说已注册的地理围栏在重新启动后仍然存在或不存在。
这些是我在堆栈溢出时查看的链接: Are Android geofences surviving a reboot?
Android Geofence eventually stop getting transition intents
Do Android Geofences remain active until removed/expired or only until my PendingIntent is launched
如果有人碰巧知道他们是否在重新启动后仍然坚持,或者如果他们没有解决,那么将不胜感激!我目前的最后一个希望是为 BOOT_COMPLETED 创建一个侦听器并在启动时重新注册它们,但我更愿意只在绝对必要时这样做。
提前非常感谢!
编辑:虽然我还没有找到明确的(书面)答案,但我很确定 TonyC 先生发布的内容是正确的,并选择了该解决方案。非常感谢 TonyC!
如果有人想查看我的解决方案,我会在设备启动时监听启动完成操作,然后重新注册我需要的所有地理围栏。
这是在清单中:
<!-- Listen for the device starting up -->
<uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED"/>
<receiver android:name="com.YOUR.PACKAGE.geofence.BootCompleteReceiver">
<intent-filter>
<action android:name="android.intent.action.BOOT_COMPLETED"/>
</intent-filter>
</receiver>
然后为其创建一个广播接收器,它将在启动时重新注册地理围栏:
package com.YOUR.PACKAGE.geofence;
import android.app.PendingIntent.CanceledException;
import android.content.Context;
import android.content.Intent;
import android.support.v4.content.WakefulBroadcastReceiver;
import com.google.android.gms.common.ConnectionResult;
import com.google.android.gms.common.GooglePlayServicesUtil;
import com.google.android.gms.location.Geofence;
public class BootCompleteReceiver extends WakefulBroadcastReceiver
{
private static final String TAG = "BootCompleteReceiver";
@Override
public void onReceive(Context context, Intent intent)
{
//Do what you want/Register Geofences
}
}
还值得注意的是,如果您在启动时处于地理围栏内,这通常会在地理围栏注册后触发地理围栏的挂起意图。
因此,例如,如果地理围栏启动了一个应用程序,那么当您启动恰好位于地理围栏中的设备时,一旦启动完成广播接收器注册了地理围栏,并且位置服务已经工作,它也会打开该应用程序你在哪里。
希望这对某人有所帮助。
【问题讨论】:
-
您真的需要在启动时使用 WakefulBroadcastReceiver 吗?简单的 lBroadcastReceiver 还不够吗?设备在启动后就进入睡眠状态是非常罕见的......
-
@Phenom 有没有关于如何注册地理围栏的示例,我遇到了问题,因为 Google Play 服务尚未初始化
标签: android google-play-services geofencing android-geofence location-client