【发布时间】:2020-04-02 02:43:07
【问题描述】:
使用我当前的配置,其他 android 设备可以很好地读取设置的 UUID,但是对于 iOS,我的同事正在从这个广告/GATT 广播中获取 UUID 的变体。我真的需要为 iOS 广播 GATT 来发现我吗?
开始广告:
@ReactMethod
private void advertise(Callback advCallBack) {
...
private static UUID myUUID = UUID.fromString("A85A30E5-93F3-42AE-86EB-33BFD8133597");
AdvertiseSettings settings = new AdvertiseSettings.Builder()
.setAdvertiseMode(AdvertiseSettings.ADVERTISE_MODE_BALANCED)
.setTxPowerLevel(AdvertiseSettings.ADVERTISE_TX_POWER_HIGH).setConnectable(false).build();
ParcelUuid pUuid = new ParcelUuid(myUUID);
AdvertiseData data = new AdvertiseData.Builder().setIncludeDeviceName(false).addServiceUuid(pUuid)
.setIncludeTxPowerLevel(true).build();
AdvertiseCallback advertisingCallback = new AdvertiseCallback() {
@Override
public void onStartSuccess(AdvertiseSettings settingsInEffect) {
super.onStartSuccess(settingsInEffect);
}
@Override
public void onStartFailure(int errorCode) {
super.onStartFailure(errorCode);
}
};
advertiser.startAdvertising(settings, data, advertisingCallback);
}
启动 GATT 服务器:
@ReactMethod
private void startServer(Callback srvCallBack) {
mBluetoothGattServer = mBluetoothManager.openGattServer(getReactApplicationContext(), mGattServerCallback);
if (mBluetoothGattServer == null) {
srvCallBack.invoke(false);
return;
}
mBluetoothGattServer.addService(new BluetoothGattService(myUUID, BluetoothGattService.SERVICE_TYPE_PRIMARY));
srvCallBack.invoke(true);
}
private BluetoothGattServerCallback mGattServerCallback = new BluetoothGattServerCallback() {
@Override
public void onConnectionStateChange(BluetoothDevice device, int status, int newState) {
if (newState == BluetoothProfile.STATE_CONNECTED) {
return;
} else if (newState == BluetoothProfile.STATE_DISCONNECTED) {
return;
}
}
};
我们不需要相互连接,我们只需要扫描它的存在并可能传递一些我现在无法从 android 执行的信息,因为仅包含设备名称会给我一个错误代码1 这基本上意味着有效负载大于广告数据包允许的 31 个字节。有什么建议吗?
【问题讨论】:
-
你想在 iOS 端读什么?向您的应用报告的外围设备标识符是每个发送方/接收方的唯一值。即 iPhone A 看到的 BLE 设备 A 的标识符与 iPhone B 看到的相同 BLE 设备的标识符不同
-
谢谢,但我已经通过在 AdvertiseData 数据中包含服务数据来解决它;
标签: java ios bluetooth-lowenergy ads android-bluetooth