android - 不一致的 Android BLE 广告
问题描述
我正在尝试在 Android 上通过蓝牙广播数据。它可以在一台设备上运行(Android 6.0.1、Galaxy Samsung Note 4),但不能在另一台设备上运行(Android 10(Oxygen 10.0.3.GM21AA ?)、OnePlus 7 Pro)。我正在查看 BLE Scanner 以了解实际宣传的内容。请参阅addServiceData
中间的三行 - 请注意,我一次只使用一个。另请注意,LANCOPY_SERVICE 和 ID 是(16 字节)UUID。
BluetoothLeAdvertiser advertiser = BluetoothAdapter.getDefaultAdapter().getBluetoothLeAdvertiser();
advertiser.startAdvertising(new AdvertiseSettings.Builder()
.setConnectable(true)
.setTimeout(0)
.setTxPowerLevel((int) dataOwner.options.getOrDefault("BleAdvertiser.TX_POWER(0-3)", 3))
.setAdvertiseMode(0)
.build(),
new AdvertiseData.Builder()
// On 6.0.1, yields 2+2 byte field. On 10, yields 16+2 byte field.
.addServiceData(new ParcelUuid(DataOwner.LANCOPY_SERVICE), new byte[]{-1,-2})
// On 6.0.1, yields 2+3 byte field. On 10, field is absent.
.addServiceData(new ParcelUuid(DataOwner.LANCOPY_SERVICE), new byte[]{-1,-2,-3})
// On 6.0.1, yields 16+2 byte field. On 10, advertisement fails (error code 1: data too big).
.addServiceData(new ParcelUuid(DataOwner.LANCOPY_SERVICE), MeUtils.asBytes(dataOwner.ID))
.setIncludeDeviceName(false)
.setIncludeTxPowerLevel(false)
.build(),
new AdvertiseCallback() {
@Override
public void onStartSuccess(AdvertiseSettings settingsInEffect) {
super.onStartSuccess(settingsInEffect);
Log.d(TAG, "onStartSuccess " + settingsInEffect);
}
@Override
public void onStartFailure(int errorCode) {
super.onStartFailure(errorCode);
Log.d(TAG, "onStartFailure " + errorCode);
}
});
为什么这些调用在不同的设备上表现不同?这是一个错误,还是晦涩的行为?理想情况下,我希望能够在尽可能广泛的 Android 版本上广播完整的 ID 和尽可能多的 SERVICE id。
作为一个可能单独的问题,当我进行任何类型的过滤时,我还无法让应用程序的不同部分发现广告 - 过滤服务 uuid,过滤服务 uuid 更改为匹配正常的 BT uuid ,按服务数据过滤....当我不过滤时,应用程序会出现,但似乎我应该能够进行预过滤。(顺便说一句,我正在使用 BLESSED 进行扫描。)
解决方案
推荐阅读
- javascript - 未处理的拒绝(TypeError):无法读取未定义的属性(读取“长度”)
- python - 在 python 中创建两个线程,一个用于阅读,一个用于询问
- reactjs - 如何获取函数的第一个参数的类型?
- asp-classic - 我该如何解决这些 ASP 重定向错误?
- android - Flutter Huawei App Linking 从链接获取信息
- python - 将数字列表输入到函数中?
- java - 在设置上写入值时出现 IllegalArgument 异常
- vue.js - 在我的 APP (Vue3) 上使用 :Value 时无法访问 V-model
- javascript - 重新加载时动态创建的表无法正确显示
- r - bigrquery:使用 dplyr 动词在 5-95 个分位数内提取平均值、最大值、最小值和 sd 不起作用