Android如何在iOS中播放BLE本地名称?

时间:2015-03-03 22:21:46

标签: android ios bluetooth broadcast discovery

我有一个Android应用广告数据,其中包含服务uuid​​和本地名称。问题是这个"本地名称" (又名蓝牙设备名称)限制为8个字符,每个字符为16位unicode表示,因此每个字符2个字节。无论何时我尝试将设备名称更改为9个字符长,由于错误1而无法启动播放

  public static final int ADVERTISE_FAILED_DATA_TOO_LARGE = 1;

我知道GAP配置文件广播数据包长27个字节,7个用于标头,因此20个应该可以免费使用,而不仅仅是16个?

这是真正让我的镍发酵的泡菜:

当iOS播放广告标题时,我将设备的完整本地名称作为ScanRecord的一部分,而不仅限于16个字节。只是广播的一部分,我没有在这里建立GATT连接。

iOS如何做到这一点?例如,在我的Android上,我能够从iOS广告广播中检索14个字符,28个字节长的唯一ID。 28字节长于蓝牙4.0标准规定的27字节限制。 Android如何能够获取超过27个字节的完整广播?为什么我的本地名称"或者设备名称最多只能是8个字符或16个字节,否则它无法开始广播?

这是我的代码:

         final BluetoothLeAdvertiser advertiser = mBluetoothAdapter.getBluetoothLeAdvertiser();

        //advertise settings
        final AdvertiseSettings.Builder settingsBuilder = new AdvertiseSettings.Builder();
        settingsBuilder.setAdvertiseMode(AdvertiseSettings.ADVERTISE_MODE_LOW_LATENCY);
        settingsBuilder.setConnectable(true);
        settingsBuilder.setTxPowerLevel(AdvertiseSettings.ADVERTISE_TX_POWER_HIGH);

        //advertise data
        AdvertiseData.Builder dataBuilder = new AdvertiseData.Builder();
        ParcelUuid uuid = new ParcelUuid(UUID.fromString("XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX"));
        dataBuilder.addServiceUuid(uuid);

        mBluetoothAdapter.setName("12345678"); //8 characters works, 9+ fails
        dataBuilder.setIncludeDeviceName(true);

     if (advertiser!=null) {
         advertiser.startAdvertising(settingsBuilder.build(), dataBuilder.build(), mAdvertiseCallback);
     } 

     mAdvertiseCallback = new AdvertiseCallback() {
         @Override
         public void onStartSuccess(AdvertiseSettings settingsInEffect) {
             super.onStartSuccess(settingsInEffect);
             Log.d(LOGN, "BLE STARTED ADVERTISING BROADCAST "+settingsInEffect);

         }

         @Override
         public void onStartFailure(int errorCode) {
                 super.onStartFailure(errorCode);
                 Log.d(LOGN, "BLE ADVERTISING FAILED TO START: "+errorCode);
         }
    };

Android是否有办法在iOS广播中包含完整的本地名称?

谢谢!

1 个答案:

答案 0 :(得分:0)

如果查看inputstr = 'abcd' newstring = '' for i in inputstr: index = alphabet.index(i) index += 1 newstring += alphabet[index] 的过载,则可以看到扫描响应还有一个附加参数。您可以将本地名称放入扫描响应数据中。请记住从数据构建器中删除StartAdvertising

setIncludeDeviceName