如何使用altbeacon库更改受监控区域?

时间:2016-05-26 10:39:41

标签: ibeacon region altbeacon

创建一个应用程序,它只在后台扫描一个特定的iBeacon。但在Activity中,我可以将其更改为我想要扫描的内容。 我正在使用altbeacon库和示例代码。已经让它扫描特定的iBeacon,但我无法让它改变Region。

我能想到的一种方法是获取全局静态字符串。这样我就可以在绑定后编辑和beaconManager将拥有新的Region。 (How to create a global variable in android?) 但是我只能把它弄成..而不是设置..,在我将活动空摧毁之后。

其他方式是直接在Activity中执行,单击Save后,只需更改它。但这似乎不起作用。

iBeaconReader.java

public class iBeaconReader extends Application implements BootstrapNotifier {

private static final String TAG = "BeaconReferenceApp";
private BeaconManager beaconManager;
private RegionBootstrap regionBootstrap;
private BackgroundPowerSaver backgroundPowerSaver;

public void onCreate() {
    super.onCreate();
    beaconManager = BeaconManager.getInstanceForApplication(this);
    beaconManager.setBackgroundMode(true);
    beaconManager.getBeaconParsers().add(new BeaconParser().setBeaconLayout("m:2-3=0215,i:4-19,i:20-21,i:22-23,p:24-24,d:25-25"));
    beaconManager.setBackgroundBetweenScanPeriod(1000l);
    beaconManager.setBackgroundScanPeriod(1000L);
    beaconManager.bind(this);

    Identifier identifier = Identifier.parse("9B749762-760E-4AD8-A221-000000000000");   // I dont want to find this. 
    Region region = new Region("null", null, null, null);                               // But I have to set it up

    regionBootstrap = new RegionBootstrap(this, region);

    backgroundPowerSaver = new BackgroundPowerSaver(this);

}

@Override
public void didEnterRegion(Region region) {
    if(!region.getUniqueId().equals("null")) {
        Log.d(TAG, "In Range- " + region);
    }
}

@Override
public void didExitRegion(Region region) {
    if(!region.getUniqueId().equals("null")) {
        Log.d(TAG, "Out of Range- " + region);
    }
}

@Override
public void didDetermineStateForRegion(int i, Region region) {

}
}

MainActivity.java

public class MainActivity extends Activity implements BeaconConsumer {
...

@Override
protected void onCreate(Bundle savedInstanceState) {
    beaconManager = BeaconManager.getInstanceForApplication(this);
    beaconManager.bind(this);

...

@Override
protected void onDestroy() {
    super.onDestroy();
    beaconManager.unbind(this);
}

...
@Override
public void onBeaconServiceConnect() {
    try {
        beaconManager.stopMonitoringBeaconsInRegion(new Region("backgroundRegion", null, null, null));
        Identifier identifier = Identifier.parse("9B749762-760E-4AD8-A221-91E0F210134C"); //mini beacon
        beaconManager.startMonitoringBeaconsInRegion(new Region("backgroundRegion", identifier, null, null));
    } catch (RemoteException e) {
        Log.e("BeaconReferenceApp", e.getMessage(), e);
    }
}

我得到了它的工作。调用onBeaconServiceConnect()函数时,我必须执行beaconManager.stopMonitoringBeaconsInRegion(new Region("backgroundRegion", null, null, null))。 当我没有停止监控时,它没有改变监控区域。

0 个答案:

没有答案