HarmonyOS鸿蒙Next中微信分享网络图片异常

发布于 1周前 作者 htzhanglong 来自 鸿蒙OS

HarmonyOS鸿蒙Next中微信分享网络图片异常 开发的App 有个微信分享功能。需求是向微信好友分享某个小程序,分享过程报错:

[wxopensdk::WXApi] openWechatWithWant fail by err: Internal error.
Failed to ensure parcel capacity, newCapacity = 204800, dataCapacity_ = 2048, minNewCapacity = 259504

应该是参数出现了异常。猜测是封面图片参数出现异常。下面是获取图片封面的代码:

//图片下载
static download(url?: string): Promise<ArrayBuffer> {
    return new Promise<ArrayBuffer>((resolve, reject) => {
      const request = http.createHttp()
      request.request(url).then((response: http.HttpResponse) => {
        if (response.responseCode === http.ResponseCode.OK) {
          if (response.result instanceof ArrayBuffer) {
            const imageData: ArrayBuffer = response.result
            console.error(TAG, 'iamgeData = ' + imageData)
            resolve(imageData)
          }
        } else {
          reject()
        }
        request.destroy()
      })
    })
}

download() 返回的ArrayBuffer对象转换成Uint8Array

const thumbImage = new Uint8Array(imageData)

分享小程序的函数:

shareMiniPro(
    context: common.UIAbilityContext,
    miniProId: string,
    path: string,
    title: string,
    description: string,
    thumbImage: Uint8Array
  ) {
    const miniProObj = new WXMiniProgramObject()
    miniProObj.userName = miniProId
    miniProObj.path = path
    miniProObj.miniprogramType = WXMiniProgramType.RELEASE

    const mediaMsg = new WXMediaMessage()
    mediaMsg.title = title
    mediaMsg.description = description
    //将Uint8Array 对象传给thumbData参数
    mediaMsg.thumbData = thumbImage
    mediaMsg.mediaObject = miniProObj

    const req = new SendMessageToWXReq()
    req.message = mediaMsg
    req.scene = SendMessageToWXReq.WXSceneSession
    req.callbackAbility = 'EntryAbility'

    WXApi.sendReq(context, req)
  }

请教各位大神帮忙分析下


更多关于HarmonyOS鸿蒙Next中微信分享网络图片异常的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html

4 回复

通过日志分析发现是图片的大小超过的限制(允许的大小是204800,图片的大小是259504)导致的异常,需要对网络下载下来的图片进行压缩再进行使用,压缩方法为:

const thumbPixel = image.createImageSource(imageData).createPixelMapSync()
const thumbBuffer = await image.createImagePacker().packToData(thumbPixel, { format: "image/png", quality: 85 })
mediaMessage.thumbData = new Uint8Array(thumbBuffer)

更多关于HarmonyOS鸿蒙Next中微信分享网络图片异常的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html


微信分享不支持太大的图片,需要使用packToData进行图片压缩一下

在HarmonyOS鸿蒙Next中,微信分享网络图片异常可能涉及多个方面。首先,鸿蒙系统采用分布式架构,微信在分享网络图片时可能需要调用系统的网络请求、图片加载和分享接口。如果这些接口在鸿蒙Next版本中存在兼容性问题,可能导致分享失败或异常。其次,微信应用本身可能未完全适配鸿蒙Next的API或系统机制,导致网络图片在加载、解析或分享过程中出现错误。此外,系统权限管理、网络配置或图片格式支持也可能影响分享功能。最后,鸿蒙Next的沙盒机制可能限制了微信对网络图片的访问或处理。具体问题需结合日志和调试信息进一步分析。

在HarmonyOS鸿蒙Next中,微信分享网络图片异常可能是由于以下原因:

  1. 权限问题:确保微信已获取必要的存储和网络权限。
  2. 网络问题:检查网络连接是否稳定,尝试切换网络。
  3. 图片格式或大小:确保图片格式为常见类型(如JPEG、PNG),且大小适中。
  4. 微信版本:更新微信至最新版本,确保兼容性。
  5. 系统兼容性:鸿蒙Next可能在某些功能上与微信不完全兼容,等待官方更新。

如果问题持续,建议反馈给微信或华为官方技术支持。

回到顶部
AI 助手
你好,我是IT营的 AI 助手
您可以尝试点击下方的快捷入口开启体验!