如何使用altbeacon安卓库使用UUID搜索信标



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的等效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 beacon库实现同样的效果,这样我就不必担心重复调度作业了。

不要将128位蓝牙GATT服务UUID与信标的邻近UUID混淆当用用破折号分隔的十六进制数字表示时,两者表面上看起来相似,字节数相同,但两者在不同的API中使用它们的目的和方法根本不同:

接近UUID是BLE信标概念。它是代表组织对信标所有权的第一个信标标识符,通常用于筛选属于您的信标。它与iBeacon和AltBeacon格式一起使用(在AltBeacon中,它通常被称为ID1(。此字段编码在BLE制造商广告

GATT服务UUID是一个较低级别的BLE概念,表示BLE外围设备执行的特定功能服务(例如心率监测器(。定制服务通常用编码在GATT服务广告内的128位GATT服务UUID进行广告,该广告是与上述制造广告完全不同类型的BLE广告包。虽然这些服务通告分组用于埃迪斯通信标,但埃迪斯通格式使用短得多的16位GATT服务UUID来通告它们自己,并且实际的信标标识符在它们的数据有效载荷内。

问题中的第二个代码示例显示了如何使用Android的内置BlE API来查找广告128位GATT服务UUID的设备。标准信标格式不使用这样的结构,这就是为什么安卓信标库的设计不能轻松搜索这些数据包。它是一个专门用于BLE信标的库,而不是一个更通用的BLE库。这就是为什么第一个代码示例不起作用的原因。

标准信标格式不适用于128位GATT服务UUID:有几个原因

  1. 数据包的大小非常有限,128位GATT服务UUID占用的空间非常大,剩下的空间非常少
  2. 信标格式必须具有前导字节模式,该模式标识数据包使用该格式。如果128位GATT服务UUID被用作信标标识符,则在此之前没有可用于识别信标格式的可配置前导码

一些使用标准格式(如iBeacon、AltBeacon或Eddystone(的信标会交织多个广告,其中一个广告中可能包括128位GATT服务UUID,通常用于广告用于配置信标的专有服务。如果你有一个硬件信标可以做到这一点,不要将此广告与实际的信标包混淆。此广告应仅用于访问专有配置服务。

最新更新