我对andriod app编程非常陌生,想询问信标。
目前,我正在使用AltBeacon android-beacon-library来编写应用程序。我喜欢实现一个功能:
理想情况下,我希望在用户靠近特定信标时显示通知。但是,如果用户在该信标周围超过30秒,我只希望显示通知。如果用户只是走过信标,那么我不希望显示通知。
请问是否有任何现有方法?我知道有一个名为“startMonitoringBeaconsInRegion”的方法,但我真的不知道这是否是一个合适的方法。任何帮助将不胜感激。
答案 0 :(得分:2)
使用后台服务通过计时器获取信标可用性。当您获得信标存在时启动计时器并在30秒后触发通知如果信标在位置可用30秒,则重置计时器。
信标背景搜索:http://developer.estimote.com/android/tutorial/part-2-background-monitoring/
以上教程链接看起来很有希望
//start when found beacon in background
Timer timer = new Timer();
timer.schedule(new TimerTask() {
@Override
public void run() {
getActivity().runOnUiThread(new Runnable() {
public void run() {
try {
//send notification
} catch (Exception e) {
e.printStackTrace();
}
}
});
}
}, 30000);
//如果信标状态为false或不可用,则重置
if (timer != null) {
timer.cancel();
}
答案 1 :(得分:0)
您可以使用范围轻松地使用Android Beacon Library轻松实现此功能。按照常规教程设置范围。然后在你的测距回调中添加如下代码:
HashMap<String,Long> beaconDetections = new HashMap<String,Long>();
public void didRangeBeaconsInRegion(Region region, Collection<Beacon> beacons) {
Long now = System.currentTimeMillis();
for (Beacon beacon : beacons) {
Long firstDetectionTime = beaconDetections.get(beacon.toString());
if (firstDetectionTime != null) {
if (now-firstDetectionTime > 30000l) {
// Put logic here for if beacon seen for 30 secs or more
}
}
else {
beaconDetections.put(beacon.toString(), now);
}
}
}
上面的代码使用HashMap跟踪第一次看到每个信标的时间,然后在每次回调时执行特殊逻辑,如果它已经被看到30秒或更长时间。