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

时间:2018-07-30 06:08:05

标签: android beacon altbeacon

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信标库实现相同的帮助,因此我不必担心重复安排作业。

1 个答案:

答案 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的原因有很多:

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

一些使用标准格式(如iBeacon,AltBeacon或Eddystone)的信标插入多个广告,并且其中之一可能包含128位GATT服务UUID,通常用于广告专有服务以配置信标。如果您有执行此操作的硬件信标,请不要将此广告与实际的信标包混淆。此广告仅应用于访问专有配置服务。