HarmonyOS蓝牙广播问题

调用蓝牙广播,报错,错误码是 401,请问需要怎样的参数格式。

关键代码如下,附近为报错信息:

// 描述蓝牙低功耗设备发送广播的参数 
let setting: ble.AdvertiseSetting = { 
  // 表示广播间隔,最小值设置32个slot表示20ms,最大值设置16384个slot,默认值设置为1600个slot表示1s。 
  interval: 150, 
  // 表示发送功率,最小值设置-127,最大值设置1,默认值设置-7,单位dbm。 
  txPower: -7, 
  // 表示是否是可连接广播 
  connectable: false 
} 
 
// 发送新蓝牙广播开锁 
// BLE广播包内容 
let advData: ble.AdvertiseData = createAdvertiseData(0x5A57, manufacturerSpecificData, serviceDataUuid, data, parcelUuids) 
// BLE回复扫描请求回复响应。 
let advResponse: ble.AdvertiseData = createAdvertiseData(0x7A77, encodePhoneData, serviceDataUuid, data, parcelUuids) 
 
try{ 
  // 开始发送BLE广播 
  ble.startAdvertising({ 
    // 描述蓝牙低功耗设备发送广播的参数 
    advertisingSettings: setting, 
    // 表示广播的数据包内容 
    advertisingData: advData, 
    // 表示回复扫描请求的响应内容 
    advertisingResponse: advResponse, 
    // 表示发送广播持续的时间。单位为10ms,有效范围为1(10ms)到65535(655350ms),如果未指定此参数或者将其设置为0,则会连续发送广播。 
    duration: 300 
  }, (err, outAdvHandle) => { 
    if (err) { 
      ... 
    } else { 
      Logger.info('BLEUtil',"advHandle: " + outAdvHandle); 
    } 
  }) 
} catch (err) { 
  Logger.error('BLEUtil', 'errCode: ' + (err as BusinessError).code + ', errMessage: ' + (err as BusinessError).message); 
} 
 
} 
 
function createAdvertiseData(manufactureId: number, manufacturerSpecificData: Uint8Array, 
                             serviceDataUuid?: string, serviceData?: Uint8Array, 
                             serviceUuids?: Array<string>):ble.AdvertiseData{ 
  // 制造商信息 
  let manufactureDataUnit: ble.ManufactureData = { 
    manufactureId: manufactureId, 
    manufactureValue: manufacturerSpecificData 
  } 
 
  let serviceDataUnit: ble.ServiceData | null = serviceDataUuid && serviceData ? { 
    serviceUuid: serviceDataUuid, 
    serviceValue: serviceData.buffer 
  } : null 
  let data: ble.AdvertiseData = { 
    // 表示要广播的服务 UUID 列表 
    serviceUuids: serviceUuids ? serviceUuids : [], 
    // 表示要广播的制造商信息列表。 
    manufactureData: [manufactureDataUnit], 
    // 表示要广播的服务数据列表。 
    serviceData: serviceDataUnit ? [serviceDataUnit] : [] 
  } 
  return data 
}
HarmonyOS
2024-09-09 09:43:59
浏览
收藏 0
回答 1
待解决
回答 1
按赞同
/
按时间
zxjiu

createAdvertiseData方法中,manufactureDataUnit的属性值manufactureValue是ArrayBuffer类型,而方法中manufacturerSpecificData参数类型是Uint8Array,所以参数无效,请将对应的代码改为以下模样:

function createAdvertiseData(manufactureId: number, manufacturerSpecificData: Uint8Array, 
                             serviceDataUuid?: string, serviceData?: Uint8Array, 
                             serviceUuids?: Array<string>):ble.AdvertiseData{ 
  // 制造商信息 
  let manufactureDataUnit: ble.ManufactureData = { 
    manufactureId: manufactureId, 
    manufactureValue: manufacturerSpecificData.buffer 
  } 
  …… 
}

参考文档:https://developer.huawei.com/consumer/cn/doc/harmonyos-guides-V5/ble-development-guide-V5#开启关闭广播

分享
微博
QQ
微信
回复
2024-09-09 15:47:02
相关问题
HarmonyOS 经典蓝牙的搜索问题
378浏览 • 1回复 待解决
HarmonyOS 经典蓝牙的socket通信问题
341浏览 • 1回复 待解决
HarmonyOS关于蓝牙无权限的问题
1031浏览 • 1回复 待解决
关于鸿蒙OS蓝牙API的问题
6936浏览 • 1回复 待解决
关于鸿蒙OS蓝牙开发的问题
4848浏览 • 1回复 待解决
harmonyOS 蓝牙怎么创建?
5609浏览 • 1回复 待解决
HarmonyOS蓝牙使用详情
340浏览 • 1回复 待解决
HarmonyOS 蓝牙API咨询
440浏览 • 2回复 待解决
HarmonyOS 蓝牙BLE开发 Dome
495浏览 • 1回复 待解决
HarmonyOS 第三方应用安装和卸载广播
387浏览 • 0回复 待解决
鸿蒙怎么接收广播有知道的吗?
11328浏览 • 1回复 待解决
HarmonyOS 蓝牙BLE使用是否需要定位
69浏览 • 1回复 待解决
HarmonyOS无法获取蓝牙设备的真实MAC
634浏览 • 1回复 待解决