我正在使用此页面上的示例代码(http://altbeacon.github.io/android-beacon-library/samples.html)在背景部分的启动应用程序中,我有一个正在运行的应用程序.
它会检测信标即使在背景上也在范围内.
问题是我需要知道它是哪个信标(UUID,Major,Minor)然后将它与我的本地数据库匹配并在应用程序仍然在后台发出通知.
didEnterRegion(Region区域)函数只有一个matchesBeacon方法,我尝试过以下方法来识别哪些信标正在被看到,但它正在抛出一个NullPointerException:
public class SightSeeing extends Activity implements BootstrapNotifier,RangeNotifier {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
Region region = new Region("sightRegion",null,null);
regionBootstrap = new RegionBootstrap(this,region);
BeaconManager.getInstanceForApplication(this).getBeaconParsers().add(
new BeaconParser(). setBeaconLayout("m:2-3=0215,i:4-19,i:20-21,i:22-23,p:24-24")
);
BeaconManager.getInstanceForApplication(this).setRangeNotifier(this);
}
@Override
public void didEnterRegion(Region region) {
regionBootstrap.disable();
BeaconManager.getInstanceForApplication(this).setRangeNotifier(this);
try {
BeaconManager.getInstanceForApplication(this).startRangingBeaconsInRegion(region);
}
catch (remoteexception e) {
Log.e(TAG,"Can't start ranging");
}
}
@Override
public void didRangeBeaconsInRegion(Collectionteratorterator = beacons.iterator();
while (beaconIterator.hasNext()) {
Beacon beacon = beaconIterator.next();
//check if beacon exists in our DB and throw notification
}
}
}
我错过了一些明显的东西,或者这个库不可能吗?
编辑:
我已经更新了代码示例,以便为您提供更广泛的想法,并且我已经尝试实施FOliveira的建议而没有任何成功.
EDIT2:
更新了代码以反映davidgyoung的建议.仍然没有运气.我在didRangeBeaconsInRegion()函数的第一行有一个Log.d(),它没有被调用.
我已经尝试添加BeaconManager.getInstanceForApplication(this).setRangeNotifier(this);在try / catch块之前,结果是一样的.
我是否实施了错误的建议,还是有其他办法让这项工作成功?
try {
BeaconManager.getInstanceForApplication(this).startRangingBeaconsInRegion(region);
}
catch (remoteexception e) {
Log.e(TAG,"Can't start ranging");
}
然后像你一样实现一个范围回调.
您还需要删除下面的代码,这可能是导致您的NullPointerException的原因,因为:
for(int i=0; i< beaconsList.size(); i++) {
Beacon b = new Beacon.Builder()
.setId1(beaconsList.get(i).get("uuid"))
.setId2(beaconsList.get(i).get("major"))
.setId3(beaconsList.get(i).get("minor"))
.build();
if(region.matchesBeacon(b)) {
//get info from DB and throw notification
}
}
编辑:我已更新库的参考应用程序,以显示如何成功完成此操作.见:https://github.com/AltBeacon/android-beacon-library-reference/blob/master/src/org/altbeacon/beaconreference/BeaconReferenceApplication.java
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。