设备重启后如何注册Geofence?

时间:2016-04-20 17:11:38

标签: android gps android-geofence

我构建了一个应用程序,在我设置的位置弹出通知。 一切顺利。即使在我重新启动设备之后。没有问题。但我注意到,如果我关闭GPS然后重新启动我的设备,BroadcastReceiver可能会尝试登录Geofence api并因为没有GPS而收到错误。并且Geofence通知不再弹出,直到我用gps on mode重新启动我的设备。 我必须使用AlarmManager吗?为了推动每x次刷新一次?要验证GPS模式是否已开启?

2 个答案:

答案 0 :(得分:5)

此解决方案假设您已经存储了要使用的地理围栏信息,其方式将通过重新启动设备而持续存在。

首次启动时,在处理RECEIVE_BOOT_COMPLETED的BroadcastReceiver中,检查是否有GPS is enabled。如果是,则继续正常,但如果没有,请将其添加到您的接收器:

@Override
public void onReceive(Context context, Intent intent) {

    //Or whatever action your receiver accepts
    if(intent.getAction().equals(Intent.ACTION_BOOT_COMPLETED)){
        LocationManager locationManager = (LocationManager)context.getSystemService(Context.LOCATION_SERVICE);
        if(!locationManager.isProviderEnabled(LocationManager.GPS_PROVIDER){
            context.registerReceiver(this, new IntentFilter(LocationManager.PROVIDERS_CHANGED_ACTION));
        }
        else{
            //We are good, continue with adding geofences!
        }
    }

    if(intent.getAction().equals(LocationManager.PROVIDERS_CHANGED_ACTION)){
        if(locationManager.isProviderEnabled(LocationManager.GPS_PROVIDER){
            context.unregisterReceiver(this);
            //We got our GPS stuff up, add our geofences!
        }
    }
}

答案 1 :(得分:2)

您可以将其添加到清单中。此示例假定您有一个BroadcastReceiver com.example.MyBroadcastReceiver,将其替换为您自己的。每当GPS打开或关闭时,此接收器将获得广播意图。

<receiver android:name="com.example.MyBroadcastReceiver">
    <intent-filter>
        <action android:name="android.location.PROVIDERS_CHANGED" />
    </intent-filter>
</receiver>