创建一个应用程序,它只在后台扫描一个特定的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))
。
当我没有停止监控时,它没有改变监控区域。