Android如何知道Geofence何时过期?

时间:2016-03-30 08:45:14

标签: android android-location android-geofence

我已使用 setExpirationDuration() 方法设置了我的地理围栏的到期时间。现在,我怎么知道我的地理围栏何时到期。是否有回调或什么?

我见过这个stackoverflow question,但我无法理解。

1 个答案:

答案 0 :(得分:1)

目前没有api支持来获取过期的地理围栏或地理列表列表。

我看到两个选项:

  1. 将存储地理围栏(例如在SharedPreferences中),然后每当您需要知道地理围栏是否过期时,只需遍历所有存储的地理围栏。

  2. 当地理围栏过期时安排意图。

  3. 选项1的实施

    我建议你创建一个可以在内部存储的类(例如在SharedPreferences中):

    public class MyGeofence {
        private String id;
        private double latitude;
        private double longitude;
        private float radiusMeters;
        private int transitionType;
        private long expirationDurationMillis;
    
        public Geofence buildGeofence() {
            return new Geofence.Builder()
                    .setCircularRegion(latitude, longitude, radiusMeters)
                    .setRequestId(id)
                    .setExpirationDuration(expirationDurationMillis)
                    .setTransitionTypes(transitionType)
                    .build();
        }
    
        ...
    }
    

    因此,当您想要添加地理围栏时,首先应创建此类的对象,调用buildGeofence,使用LocationServices.GeofencingApi.addGeofences()添加它,然后存储它。

    然后,只要您想知道哪些地理围栏过期,就应该迭代所有存储的MyGeofence对象。

    选项2的实施

    设置地理围栏的到期时,还应安排pendingIntent。

    Intent notificationIntent = new Intent(this, MyBroadcastReceiver.class);
    PendingIntent pendingIntent = PendingIntent.getBroadcast(this, 0, notificationIntent, PendingIntent.FLAG_UPDATE_CURRENT);
    
    long futureInMillis = SystemClock.elapsedRealtime() + delay;
    AlarmManager alarmManager = (AlarmManager)getSystemService(Context.ALARM_SERVICE);
    alarmManager.set(AlarmManager.ELAPSED_REALTIME_WAKEUP, futureInMillis, pendingIntent);
    

    请记住在清单中注册:

    <receiver android:name=".MyBroadcastReceiver" />