棒棒糖+取消绑定BeaconManager不起作用

时间:2018-07-25 11:29:26

标签: java android beacon ibeacon-android eddystone

我正在尝试在我的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,但是没有相似之处。

我在做什么错了?

1 个答案:

答案 0 :(得分:0)

为了防止重复的回调,除了解除绑定之外,还应该调用(a)stopRangingBeaconsInRegion(...)和(b)removeRangeNotifier(...)。要删除通知程序,您需要保留对回调类的引用。