我在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()
。
非常感谢任何帮助。
更新
MyActivity
(BaseActivity
是Activity
的子类):
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");
});
}
}
答案 0 :(得分:0)
我最终将beaconManager移动到我的Application
子类,而不是在我的活动中使用它。