我已经编写了一段代码来在GattService UUID中发布广告,尽管我仍然不能确定应该通过哪种解析器来运行它,以便只接受以相同格式发布并且是有效的发布模式的结果。
要在Gatt服务UUID中公布的代码:
public void startGattServiceAdvertising() {
BluetoothAdapter defaultAdapter = BluetoothAdapter.getDefaultAdapter();
if (defaultAdapter == null) {
return;
}
String uniqueId = "Hello world";
if (uniqueId.isEmpty()) {
return;
}
defaultAdapter.setName(uniqueId);
BluetoothLeAdvertiser advertiser = defaultAdapter.getBluetoothLeAdvertiser();
AdvertiseSettings.Builder settingsBuilder = new AdvertiseSettings.Builder()
.setAdvertiseMode(AdvertiseSettings.ADVERTISE_MODE_BALANCED)
.setTxPowerLevel(AdvertiseSettings.ADVERTISE_TX_POWER_LOW)
.setConnectable(true);
String userId = "4539c428-0c3c-4606-b701-98bde9c39a82";
ParcelUuid pUuid = new ParcelUuid(UUID.fromString(userId));
LogHelper.d("Parcel: ", "UUID: " + pUuid.getUuid());
AdvertiseData data = new AdvertiseData.Builder()
.setIncludeDeviceName(false)
.addServiceUuid(pUuid)
.setIncludeTxPowerLevel(false).build();
LogHelper.d("Parcel: ", "Service UUID: " + data.getServiceUuids().toString());
if (advertiser != null) {
try {
advertiser.startAdvertising(settingsBuilder.build(), data, getAdvertiseCallback());
} catch (Exception e) {
e.printStackTrace();
// Adding common exception just to retry this if anything goes wrong in the first time
// (Chinese devices facing some legacy data issue)
//Some OEM shows Advertising data too large exception,so not sending txPowerLevel
}
}
}这是我正在寻找的广告方式,我也能够在其他设备上检测到同样的情况,我唯一关心的是我需要在库端进行更改以验证这一特定格式,就像AltBeacon库通过调用fromScanData(..)方法对其他格式所做的那样。为了让检测到的信标通过解析器成功运行,我是否需要在扫描端做一些额外的广告,或者应该做哪些更改。
发布于 2020-07-03 04:50:13
所显示的代码只是发出一个标准的BLE128位服务UUID通告,该通告恰好在服务UUID字段中放置了一个用户id。
这很好--但它无法让您在接收端确定这是“您的”广告之一,还是不是来自硬件设备的广告。例如,Apple Watch将发出使用此相同格式的特定128位服务UUID。因此,如果你的Android应用程序扫描此广告时遇到Apple Watch,它会认为这是一个特定的用户id。
像iBeacon,AltBeacon和Eddystone这样的标准信标格式至少有三个部分,第一个部分解决了这个问题:
您显示的格式缺少fist组件。因此,您无法判断它是否是您的信标类型
需要注意的一点是,如果需要iOS互操作性,请注意使用服务广告。虽然iOS可以扫描和传输这些广告,但它不能在后台传输这种格式。此外,它根本不能附加服务数据,这使得上面的点(1)是不可能的。出于同样的原因,Eddystone格式根本不能在iOS上做广告。
https://stackoverflow.com/questions/62704591
复制相似问题