我已使用 setExpirationDuration() 方法设置了我的地理围栏的到期时间。现在,我怎么知道我的地理围栏何时到期。是否有回调或什么?
我见过这个stackoverflow question,但我无法理解。
答案 0 :(得分:1)
目前没有api支持来获取过期的地理围栏或地理列表列表。
我看到两个选项:
将存储地理围栏(例如在SharedPreferences中),然后每当您需要知道地理围栏是否过期时,只需遍历所有存储的地理围栏。
当地理围栏过期时安排意图。
选项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" />