Android如何知道地理围栏何时过期?
Posted
技术标签:
【中文标题】Android如何知道地理围栏何时过期?【英文标题】:Android how to know when Geofence has expired? 【发布时间】:2016-07-18 03:53:17 【问题描述】:我已经使用 setExpirationDuration() 方法设置了我的地理围栏的过期时间。现在,我怎么知道我的地理围栏何时过期。有回调什么的吗?
我看过这个*** question,但我想不通。
【问题讨论】:
只是为了了解这个问题的一些背景信息,您为什么想知道地理围栏是否已过期?至于检查你的地理围栏是否已经过期,你有没有检查过 GeofencingRequest 类中的地理围栏列表,看看你的地理围栏是否还在列表中?根据文档,一旦过期,地理围栏就会被移除。 【参考方案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);
记得在manifest中注册:
<receiver android:name=".MyBroadcastReceiver" />
【讨论】:
以上是关于Android如何知道地理围栏何时过期?的主要内容,如果未能解决你的问题,请参考以下文章