我正在尝试在我的Android应用程序中实现信标功能。 不幸的是,有一些我无法解决的奇怪行为。
我正在使用2.15版和Android 6.0.1版中的Android Beacon Library。
我有一个活动
class MainActivity extends AppCompatActivity implements BeaconConsumer
我要在附近搜索信标的地方。我像这样初始化BeaconManager
private BeaconManager m_beaconManager;
[...]
m_beaconManager = BeaconManager.getInstanceForApplication(this);
m_beaconManager.getBeaconParsers().add(new BeaconParser().setBeaconLayout(BeaconParser.EDDYSTONE_URL_LAYOUT));
m_beaconManager.bind(this);
在onCreate()
方法中。
我搜索信标的方式
@Override
public void onBeaconServiceConnect() {
m_beaconManager.addRangeNotifier(new RangeNotifier() {
@Override
public void didRangeBeaconsInRegion(Collection<Beacon> collection, Region region) {
// do something
}
});
try {
m_beaconManager.startRangingBeaconsInRegion(m_region);
} catch(RemoteException e) {
e.printStackTrace();
}
}
工作正常。
在我的应用程序中,我想在列表中显示这些信标,如果我单击其中的一个,则要启动一个新活动,其中包含有关信标的更多信息(MAC地址,距离等)。
我目前的方法是在BeaconManager
方法中取消绑定onPause()
,并在新的Activity中创建一个全新的BeaconManager
。这也完美无瑕。
但是,当我finish()
进行第二次活动时,它并没有停止搜索信标。我也像这样取消绑定BeaconManager
@Override
public void onPause() {
super.onPause();
m_beaconManager.unbind(this);
}
@Override
public void onDestroy() {
super.onDestroy();
m_beaconManager.unbind(this);
}
@Override
public void onStop() {
super.onStop();
m_beaconManager.unbind(this);
}
但是回到我的MainActivity
中,我有2次搜索信标。一个来自我的MainActivity
,另一个来自我已经完成的第二项活动。
此外,如果我单击列表中的另一个项目,这意味着我再次创建第二个活动,它将从第一个开始寻找信标,然后从新的信标中寻找。列表上的每次新单击都会向现有搜索添加新搜索。
我已经搜索了已知的Bug,但是没有相似之处。
我在做什么错了?
答案 0 :(得分:0)
为了防止重复的回调,除了解除绑定之外,还应该调用(a)stopRangingBeaconsInRegion(...)
和(b)removeRangeNotifier(...)
。要删除通知程序,您需要保留对回调类的引用。