如何使用 altbeacon android 库使用 UUID 搜索信标?

How to search beacons using UUID using altbeacon android library?

替代信标库提供了许多基于信标布局的示例。没有关于如何使用 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 beacon 库实现相同目标的任何帮助,这样我就不必担心重复安排作业。

不要将 128 位蓝牙 GATT 服务 UUID 与信标的 Proximity UUID 混淆。当用破折号分隔的十六进制数字表示时,两者表面上看起来相似,并且具有相同的字节数,但两者具有根本不同的目的和将它们与各种 API 一起使用的方式:

A​​ Proximity UUID 是一个 BLE 信标概念。它是代表组织对信标所有权的第一个信标标识符,通常用于过滤属于您的信标。它与 iBeacon 和 AltBeacon 格式一起使用(在 AltBeacon 中通常称为 ID1)。该字段在 BLE 制造商广告

中编码

A​​ 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 的原因有多种:

  1. 数据包的大小非常有限,128 位 GATT 服务 UUID 占用的空间非常大,几乎没有剩余空间。
  2. 信标格式必须有一个前导码字节模式来标识数据包使用该格式。如果使用128位的GATT Service UUID作为信标标识,则在此之前没有可配置的前导码可以用来标识信标格式。

一些使用 iBeacon、AltBeacon 或 Eddystone 等标准格式的信标会交织多个广告,其中一个可能包含 128 位 GATT 服务 UUID,通常用于宣传配置信标的专有服务。如果您有执行此操作的硬件信标,请不要将此广告与实际的信标数据包混淆。此广告应仅用于访问专有配置服务。