我使用Altbeacon库为我的应用扫描信标。当有广告时,我已成功扫描并推送通知。我的要求是我需要扫描UUID列表,但文档中给出的示例仅使用一个UUID进行扫描。
这是我到目前为止所做的,我将BeaconConsumer放入我的BaseActivity中,以便在启动后立即开始扫描(无背景扫描):
public class BaseActivity extends SlidingFragmentActivity implements BeaconConsumer {
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
...
beaconManager = BeaconManager.getInstanceForApplication(this);
beaconManager.getBeaconParsers().add(new BeaconParser().
setBeaconLayout("m:2-3=0215,i:4-19,i:20-21,i:22-23,p:24-24"));
beaconManager.bind(this);
}
@Override
public void onBeaconServiceConnect() {
beaconManager.setMonitorNotifier(new MonitorNotifier() {
@Override
public void didEnterRegion(Region region) {
Intent intent = new Intent(getApplicationContext(), BeaconNotificationService.class);
intent.putExtra("uuid", region.getId1().toString());
intent.putExtra("major", region.getId2().toString());
intent.putExtra("minor", region.getId3().toString());
intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
startService(intent);
}
@Override
public void didExitRegion(Region region) {
Log.i(TAG, "I no longer see any beacon");
}
@Override
public void didDetermineStateForRegion(int state, Region region) {
Log.i(TAG, "I have just switched from seeing/not seeing beacons: "+state);
}
});
try {
beaconManager.startMonitoringBeaconsInRegion(new Region("com.my.app.boostrapRegion",
Identifier.parse(Constants.BT_UUID),
Identifier.fromInt(Constants.BT_MAJOR),
Identifier.fromInt(Constants.BT_MINOR)));
} catch (RemoteException e) { e.printStackTrace(); }
}
}
在Constants类中,我为测试目的定义了我的UUID:
public class Constants {
public static final String BT_UUID = "bbbbbbbb-3443-8888-3443-bb323bbb0005";
public static final int BT_MAJOR = 0;
public static final int BT_MINOR = 0;
}
如何让BeaconConsumer扫描一系列UUID?
由于
答案 0 :(得分:1)
您可以添加null
来查找范围内的所有信标,而不是在区域中定义UUID。然后,您可以过滤掉您正在寻找的信标。
在这个例子中,出于清晰的目的,我保留了主要和次要ID完整。
try {
beaconManager.startMonitoringBeaconsInRegion(new Region("com.kedai.baucar.boostrapRegion",
null,
Identifier.fromInt(Constants.BT_MAJOR),
Identifier.fromInt(Constants.BT_MINOR)));
} catch (RemoteException e) { e.printStackTrace(); }