使用 AltBeacon 库以 CoreBluetooth 格式做广告
Posted
技术标签:
【中文标题】使用 AltBeacon 库以 CoreBluetooth 格式做广告【英文标题】:Advertise in CoreBluetooth format using the AltBeacon library 【发布时间】:2020-06-17 10:12:26 【问题描述】:我正在尝试使用 BLE 在 android 和 ios 之间实现操作系统间广告和扫描功能。 我需要了解从 Android 设备在 CoreBluetooth 中投放广告需要遵循的流程。 我一直在使用 AltBeacon 库以 iBeacon 格式进行广告,效果很好,但是 ios 无法扫描 iBeacon 上有限数量的信标的限制迫使我转向 CoreBluetooth 框架。
这是我用来以 iBeacon 格式做广告的示例代码:
BluetoothManager bluetoothManager =
(BluetoothManager) applicationContext.getSystemService(Context.BLUETOOTH_SERVICE);
if (bluetoothManager != null)
BluetoothAdapter mBluetoothAdapter = bluetoothManager.getAdapter();
BluetoothLeAdvertiser mBluetoothLeAdvertiser = mBluetoothAdapter.getBluetoothLeAdvertiser();
if (mBluetoothLeAdvertiser != null)
beacon = new Beacon.Builder()
.setId1(userId)
.setId2("1")
.setId3("1")
.setManufacturer(0x004C)
.setTxPower(-75)
.setDataFields(Arrays.asList(new Long[]0l))
.build();
beaconParser = new BeaconParser()
.setBeaconLayout("m:2-3=0215,i:4-19,i:20-21,i:22-23,p:24-24");
beaconTransmitter = new BeaconTransmitter(InventaSdk.getContext(), beaconParser);
beaconTransmitter.setBeacon(beacon);
【问题讨论】:
【参考方案1】:CoreBluetooth 不是一种格式。它是 iOS 上的一组 API。使用 CoreBluetooth,您可以检测各种有限制的信标格式:
AltBeacon 格式只能在 iOS 应用处于前台时检测到 可以在前景和背景中检测到 Eddystone 格式,但在背景中检测速度比 iBeacon 慢。 CoreBluetooth 无法检测到 iBeacon 格式。为此,您必须使用 CoreLocation。要在 AltBeacon 中做广告(可被核心蓝牙检测到),请使用以下代码:
Beacon beacon = new Beacon.Builder()
.setId1("2f234454-cf6d-4a0f-adf2-f4911ba9ffa6")
.setId2("1")
.setId3("2")
.setManufacturer(0x0118)
.setTxPower(-59)
.setDataFields(Arrays.asList(new Long[] 0l))
.build();
BeaconParser beaconParser = new BeaconParser()
.setBeaconLayout("m:2-3=beac,i:4-19,i:20-21,i:22-23,p:24-24,d:25-25");
BeaconTransmitter beaconTransmitter = new BeaconTransmitter(getApplicationContext(), beaconParser);
beaconTransmitter.startAdvertising(beacon);
使用 CoreBlutooth 解析信标很棘手。您可能想使用iOS Beacon Tools 之类的工具来执行此操作。
另外值得补充的是,iOS 不能宣传 AltBeacon 或 Eddystone 格式。它只能通告 iBeacon 和 GATT 服务 UUID。
【讨论】:
感谢大卫的快速回复。这确实帮助我树立了理解局限性的观点。再快一点,ios 在后台做广告有哪些不同的方式? iOS 上的后台广告仅限于溢出区域广告。你可以阅读更多关于这些here 基于溢出区域广告博客中建议的功能,您是否有一个示例应用程序可以在以 iBeacon 格式扫描时扫描位掩码中的每个可能位? github.com/davidgyoung/BackgroundAdvertiser 上述存储库中使用的格式是基于 GATT 服务 UUID 的,对吗?是否有任何特定于 iBeacon 的内容,我们可以在后台扫描并以 iBeacon 格式进行广告宣传?以上是关于使用 AltBeacon 库以 CoreBluetooth 格式做广告的主要内容,如果未能解决你的问题,请参考以下文章
如何使用 android-beacon-library (altbeacon) 正确停止扫描信标
AltBeacon:didExitRegion 和 didEnterRegion 交替
使用 altBeacon 库在 Android 中未显示所有信标
Android 如何使用 Android Studio 和 gradle 创建包含 Altbeacon 库的库(jar)