alt信标库基于信标布局提供了许多示例。没有有关如何使用uuid查找信标的文档?
尝试输入代码;
try {
beaconManager.startMonitoringBeaconsInRegion(new Region("myMonitoringUniqueId", null, null, null));
Identifier identifier = Identifier.parse("XXXXXXXX-XXXX-XXXXX-XXXX-XXXXXXXXXXXX"); //beacon 1
beaconManager.startMonitoringBeaconsInRegion(new Region("identifier", identifier, null, null));
} catch (RemoteException e) { }
它不起作用。但是使用本机API的同等产品效果很好。
List<ScanFilter> scanFilters = new ArrayList<>();
ParcelUuid uid = ParcelUuid.fromString(J_UUID);
ScanFilter filter = new ScanFilter.Builder().setServiceUuid(uid).build();
scanFilters.add(filter);
List<ScanFilter> filters = scanFilters;
BluetoothManager bluetoothManager =
(BluetoothManager) getApplicationContext().getSystemService(Context.BLUETOOTH_SERVICE);
BluetoothAdapter bluetoothAdapter = bluetoothManager.getAdapter();
Intent intent = new Intent(getApplicationContext(), MyBroadcastReceiver.class);
intent.putExtra("o-scan", true);
PendingIntent pendingIntent = PendingIntent.getBroadcast(getApplicationContext(), 0, intent, PendingIntent.FLAG_UPDATE_CURRENT);
bluetoothAdapter.getBluetoothLeScanner().startScan(filters, settings, pendingIntent);
感谢您使用alt信标库实现相同的帮助,因此我不必担心重复安排作业。
答案 0 :(得分:0)
不要将128位蓝牙GATT服务UUID与信标的邻近UUID混淆。当用十六进制数字表示时,两者看起来很相似,用破折号隔开,并且字节数相同,但是两者具有根本不同的目的以及将它们与各种API结合使用的方式:
邻近UUID 是BLE信标概念。它是第一个信标标识符,代表组织对信标的所有权,通常用于过滤属于您的信标。它与iBeacon和AltBeacon格式一起使用(在AltBeacon中通常称为ID1)。该字段在BLE 制造商广告
中编码GATT服务UUID 是一个较低级别的BLE概念,代表BLE外围设备执行的特定功能服务(例如,心率监视器)。定制服务通常通过在 GATT服务广告中编码的128位GATT服务UUID进行广告,这是与上述制造广告完全不同的BLE广告包类型。这些服务通告数据包用于Eddystone信标时,Eddystone格式使用短得多的16位GATT服务UUID进行自我通告,而实际的信标标识符位于其数据有效载荷之内。
问题中的第二个代码示例显示了如何使用Android的内置BlE API查找广告128位GATT服务UUID的设备。标准信标格式不使用此类结构,这就是Android信标库未设计为轻松搜索这些数据包的原因。它是用于处理BLE信标的专用库,而不是更通用的BLE库。这就是第一个代码示例不起作用的原因。
标准信标格式不能用于128位GATT服务UUID的原因有很多:
一些使用标准格式(如iBeacon,AltBeacon或Eddystone)的信标插入多个广告,并且其中之一可能包含128位GATT服务UUID,通常用于广告专有服务以配置信标。如果您有执行此操作的硬件信标,请不要将此广告与实际的信标包混淆。此广告仅应用于访问专有配置服务。