Lollipop+ 解除绑定 BeaconManager 不工作

Lollipop+ Unbind BeaconManager not working

我正在尝试在我的 Android 应用程序中实现信标功能。 不幸的是,有一些奇怪的行为我还不能解决。

我正在使用版本 2.15 中的 Android Beacon Library 和 Android 6.0.1。

我有一个Activity

 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();
    }
}

工作得很好。

在我的应用程序中,我想在列表中显示这些信标,如果我单击其中一个,我想启动一个新的 activity,其中包含有关信标的更多信息(MAC 地址,距离等)。 我目前的做法是在 onPause() 方法中取消绑定我的 BeaconManager,并在我的新 Activity 中创建一个全新的 BeaconManager。这也完美无缺。

但是一旦我 finish() 我的第二个 activity 它就不会停止搜索信标。我也像这样解除绑定 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,另一个来自我已经完成的第二名activity。

此外,如果我单击列表中的另一个项目,这意味着我再次创建第二个 activity,它会从第一个开始和新的开始寻找信标。列表上的每一次新点击都会在现有搜索中添加一个新搜索。

我已经搜索过已知的 Bug,但没有类似的。

我做错了什么?

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