首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >蓝牙外设ADVERTISE_FAILED_DATA_TOO_LARGE

蓝牙外设ADVERTISE_FAILED_DATA_TOO_LARGE
EN

Stack Overflow用户
提问于 2015-07-18 19:22:46
回答 3查看 9.2K关注 0票数 13

我试图在Nexus9中做广告,但得到了ADVERTISE_FAILED_DATA_TOO_LARGE的错误。当我在成功广告后添加服务时,它工作得非常好,但如果我通过广告数据构建器添加服务,以便其他设备可以在扫描时过滤,我会得到错误代码1,即ADVERTISE_FAILED_DATA_TOO_LARGE

a)工作代码

代码语言:javascript
复制
     public void startAdvertisingService() {
    AdvertiseSettings settings = new AdvertiseSettings.Builder()
            .setTxPowerLevel(AdvertiseSettings.ADVERTISE_TX_POWER_HIGH)
            .setTimeout(0)
            .setAdvertiseMode(AdvertiseSettings.ADVERTISE_MODE_LOW_LATENCY)      
            .build();


     AdvertiseData.Builder advertiseData = new AdvertiseData.Builder();
    advertiseData.setIncludeDeviceName(true);

     BluetoothLeAdvertiser myBluetoothLeAdvertiser = btAdapter.getBluetoothLeAdvertiser();
      myBluetoothLeAdvertiser.stopAdvertising(mAdvertiseCallback);

    myBluetoothLeAdvertiser.startAdvertising(settings, advertiseData.build(),mAdvertiseCallback);

   }
    private AdvertiseCallback mAdvertiseCallback = new AdvertiseCallback() {

    @Override
    public void onStartSuccess(AdvertiseSettings settingsInEffect) {
        super.onStartSuccess(settingsInEffect);
        BLEBroadcast();
    }

    @Override
    public void onStartFailure(int errorCode) {
        String description = "";
        if (errorCode == AdvertiseCallback.ADVERTISE_FAILED_FEATURE_UNSUPPORTED)
            description = "ADVERTISE_FAILED_FEATURE_UNSUPPORTED";
        else if (errorCode == AdvertiseCallback.ADVERTISE_FAILED_TOO_MANY_ADVERTISERS)
            description = "ADVERTISE_FAILED_TOO_MANY_ADVERTISERS";
        else if (errorCode == AdvertiseCallback.ADVERTISE_FAILED_ALREADY_STARTED)
            description = "ADVERTISE_FAILED_ALREADY_STARTED";
        else if (errorCode == AdvertiseCallback.ADVERTISE_FAILED_DATA_TOO_LARGE)
            description = "ADVERTISE_FAILED_DATA_TOO_LARGE";
        else if (errorCode == AdvertiseCallback.ADVERTISE_FAILED_INTERNAL_ERROR)
            description = "ADVERTISE_FAILED_INTERNAL_ERROR";
        else description = "unknown";

    }
};

并且还添加了服务:

代码语言:javascript
复制
 void BLEBroadcast() {

    BluetoothGattCharacteristic characteristic = new     BluetoothGattCharacteristic(characteristicUUID, BluetoothGattCharacteristic.PROPERTY_NOTIFY | BluetoothGattCharacteristic.PROPERTY_INDICATE | BluetoothGattCharacteristic.PROPERTY_READ | BluetoothGattCharacteristic.PROPERTY_WRITE, BluetoothGattCharacteristic.PERMISSION_READ | BluetoothGattCharacteristic.PERMISSION_WRITE);

    BluetoothGattDescriptor desc = new BluetoothGattDescriptor(descriptorUUID, BluetoothGattDescriptor.PERMISSION_READ | BluetoothGattDescriptor.PERMISSION_WRITE);
    desc.setValue("".getBytes());

    characteristic.addDescriptor(desc);

    BluetoothGattService service = new BluetoothGattService(serviceUUID,     BluetoothGattService.SERVICE_TYPE_PRIMARY);
    service.addCharacteristic(characteristic);

    mGattServer.addService(service);
 }

b)最初添加服务时不起作用,以便中心可以通过过滤器发现:

在调用startAdvertisingService()之前调用BLEBroadcast()函数,并添加

代码语言:javascript
复制
        AdvertiseData.Builder advertiseData = new AdvertiseData.Builder();
        advertiseData.addServiceUuid(new ParcelUuid(serviceUUID)); 

给出广告失败,错误代码为% 1。

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2015-07-20 19:01:25

我怀疑这就是导致问题的代码行:

代码语言:javascript
复制
advertiseData.setIncludeDeviceName(true);

通告将没有足够的空间同时容纳设备名称和16字节的服务UUID。因此,如果您包含上述内容,则添加:

代码语言:javascript
复制
advertiseData.addServiceUuid(new ParcelUuid(serviceUUID)); 

您将得到您所描述的错误。尝试删除第一行。

票数 40
EN

Stack Overflow用户

发布于 2017-06-12 18:23:39

基本上你的数据超过了31个字节,所以你需要减少它。

将其更改为false,则它将起作用:

代码语言:javascript
复制
advertiseData.setIncludeDeviceName(false);
票数 3
EN

Stack Overflow用户

发布于 2018-08-02 16:47:05

您可以将设备的名称更改为更短的名称。示例: XYZ_Name_pic -> XYZ

进入蓝牙->设置->重命名设备名称

或者您可以传递false而不是true

advertiseData.setIncludeDeviceName( false );//传入false不为true

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/31490649

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档