我的代码片段: 我试过altbeacon gradle。 我已根据以下代码声明了Region。
我在Application类的onCreate方法中写了这一行。 Region region = new Region(“all beacon”,null,null,null);
我可以在“didRangeBeaconsInRegion”中获得Beacon的主要,次要和uuid。
问题:我没有将didEnterRegion()和didExitRegion()方法中的信标识别为获取major,minor和uuid的空值。
我该如何解决这个问题?
答案 0 :(得分:0)
没有错,这就是信标监控的工作原理。监视时,如果检测到与您的Region定义的通配符模式匹配的任何信标,则会收到通知。此通知告诉您检测到匹配的信标,并提供对正在监视的Region对象的引用。
在所示的示例中,定义的Region对于三个信标标识符中的每一个都具有null,这意味着它将匹配任何信标。因此,当检测到任何信标时,它仅提供单个回调,并且不会告诉您匹配的标识符。
您有两种方法可以访问标识符:
如果你只关心几个信标,你可以监视多个显式区域,例如:Region region1 = new Region("first beacon", "2F234454-CF6D-4A0F- ADF2-F4911BA9FFA6", "1", " 2");
这将在回调中为你提供一个Region对象,并设置所有标识符。
使用范围API,每秒都会给您一个回调,其中包含标识符与定义区域匹配的所有信标列表。
以下是选项1的完整Activity实现。运行此操作时,您将在LogCat中看到以下内容:
D/MonitoringActivity(31644): starting monitoring
D/MonitoringActivity(31644): Entered region: null null null
D/MonitoringActivity(31644): Entered region: 2f234454-cf6d-4a0f-adf2-f4911ba9ffa6 1 1
请注意,第一个区域条目将发送所有空标识符,因为该活动还监视所有空区域。
public class MonitoringActivity extends Activity implements BeaconConsumer, MonitorNotifier {
protected static final String TAG = "MonitoringActivity";
private BeaconManager mBeaconManager;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_monitoring);
mBeaconManager = BeaconManager.getInstanceForApplication(this);
mBeaconManager.bind(this);
}
@Override
public void onBeaconServiceConnect() {
try {
mBeaconManager.setMonitorNotifier(this);
mBeaconManager.startMonitoringBeaconsInRegion(new Region("all beacons region", null, null, null));
mBeaconManager.startMonitoringBeaconsInRegion(new Region("region 1", Identifier.parse("2F234454-CF6D-4A0F-ADF2-F4911BA9FFA6"), Identifier.parse("1"), Identifier.parse("1")));
mBeaconManager.startMonitoringBeaconsInRegion(new Region("region 2", Identifier.parse("2F234454-CF6D-4A0F-ADF2-F4911BA9FFA6"), Identifier.parse("1"), Identifier.parse("2")));
Log.d(TAG, "starting monitoring");
} catch (RemoteException e) {
Log.e(TAG, "can't monitor", e);
}
}
@Override
public void didEnterRegion(Region region) {
Log.d(TAG, "Entered region: "+region.getId1()+" "+region.getId2()+" "+region.getId3());
}
@Override
public void didExitRegion(Region region) {
Log.d(TAG, "Exited region: "+region.getId1()+" "+region.getId2()+" "+region.getId3());
}
@Override
public void didDetermineStateForRegion(int state, Region region) {
}
}