Android IBeaconManager无法从活动连接

时间:2014-05-08 20:49:12

标签: android bluetooth-lowenergy ibeacon ibeacon-android

我在android上使用来自radius网络的IBeacon SDK。我目前在一个Activity和一个Service中使用IBeaconManager。应用程序首次启动时,活动将绑定其iBeaconManager对象,但永远不会调用onIBeaconServiceConnect。调用ex startRangingBeaconsInRegion(region)的任何测距或监视函数都会抛出RemoteException:

 The IBeaconManager is not bound to the service.  Call iBeaconManager.bind(IBeaconConsumer consumer) and wait for a callback to onIBeaconServiceConnect()

令人惊讶的是,iBeaconMananger.isBound(myActivity)正在返回true。

现在当我启动我的服务(从我的活动解除绑定并绑定到我的服务)时,绑定工作正常,我可以开始监视信标。如果那时,我再次打开活动(从我的服务解除绑定并绑定到我的活动后),它现在也在我的活动中工作。

因此,只有在应用首次启动时,才会为我的活动调用onIBeaconServiceConnect()

非常感谢任何帮助。


更新

MyActivityBaseActivityActivity的子类):

public class MyActivity extends BaseActivity implements IBeaconConsumer {

    private IBeaconManager iBeaconManager;
    LocationManager locationManager;

    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.new_survey);

        locationManager = (LocationManager) this.getSystemService(Context.LOCATION_SERVICE);

        ...

        iBeaconManager = IBeaconManager.getInstanceForApplication(this);
        iBeaconManager.bind(this);
    }

    @Override
    public void onIBeaconServiceConnect() {
        Log.d("mytag","beacon service connected");
        iBeaconManager.setRangeNotifier(new RangeNotifier() {
            @Override
            public void didRangeBeaconsInRegion(Collection<IBeacon> iBeacons, Region region) {
                Log.d("mytag","did range beacons");

        });
    }
}

1 个答案:

答案 0 :(得分:0)

我最终将beaconManager移动到我的Application子类,而不是在我的活动中使用它。