当前位置: 首页 > article >正文

鸿蒙开发融云demo发送图片消息

鸿蒙开发融云demo发送图片消息

融云鸿蒙版是不带UI的,得自己一步步搭建。
这次讲如何发送图片消息,选择图片,显示图片消息。
还是有点难度的,好好看,好好学。

一、思路:

选择图片用:photoViewPicker.select

二、效果图:

在这里插入图片描述
在这里插入图片描述

三、关键代码:
/**
   * 选择图片
   * 注:官方说不用申请权限
   */
  public static  openGallery(maxSelectNumber:number,callBack:(result:string[])=>void) {
    if(maxSelectNumber){
      const photoSelectOptions = new photoAccessHelper.PhotoSelectOptions();
      photoSelectOptions.MIMEType = photoAccessHelper.PhotoViewMIMETypes.IMAGE_TYPE; // 过滤选择媒体文件类型为IMAGE
      photoSelectOptions.maxSelectNumber = maxSelectNumber; // 选择媒体文件的最大数目

      const photoViewPicker = new photoAccessHelper.PhotoViewPicker();
      photoViewPicker.select(photoSelectOptions).then((photoSelectResult: photoAccessHelper.PhotoSelectResult) => {
        if (photoSelectResult.photoUris.length > 0) {
          callBack(photoSelectResult.photoUris)
        }
      }).catch((err: BusinessError) => {
        console.error(`Invoke photoViewPicker.select failed, code is ${err.code}, message is ${err.message}`);
      })
    }else {
      showToast('已选素材数量达到上限')
    }
  }
public static sendImageMessage(targetId: string, localPath: string,successCallBack?:()=>void) {
    let conId = new ConversationIdentifier();
    conId.conversationType = ConversationType.Private;
    conId.targetId = targetId;

    let imageMsg = new ImageMessage();
    imageMsg.localPath = localPath;

    let msgSrc = new Message(conId, imageMsg);
    let option: ISendMsgOption = {};
    let msgAfter: Message = msgSrc
    IMEngine.getInstance().sendMediaMessage(msgSrc, option, (msg: Message) => {
      // 消息保存到数据库
      msgAfter = msg
      msgAfter.sentStatus = SentStatus.Sending
      // 这边会填消息
      EventKeys.postEvent(EventKeys.ReceivedImMessageEvents,ReceivedImMessageEvent(msgAfter))
    }, (msg: Message, progress: number) => {
      // 媒体上传进度 [1 ~ 100]
    }).then(result => {
      if (EngineError.Success !== result.code) {
        //发送消息失败
        msgAfter.sentStatus = SentStatus.Failed
        EventKeys.postEvent(EventKeys.ReceivedImMessageEvents,ReceivedImMessageEvent(msgAfter))
        return;
      }
      if (!result.data) {
        // 消息为空
        // 成功的状态,但是理论上不会出现发送消息成功,但是消息体为空的情况,暂时不处理,避免发送多次通知
        // msgAfter.sentStatus = SentStatus.Sent
        // emitter.emit(EventKeys.RECEIVED_IM_MESSAGE_EVENT, ReceivedImMessageEvent(msgAfter))
        return;
      }
      let msg = result.data as Message;
      EventKeys.postEvent(EventKeys.ReceivedImMessageEvents,ReceivedImMessageEvent(msg))
      // 刷新会话列表,不打算自己插入会话
      EventKeys.postEvent(EventKeys.RefreshMsgListEvents)
      successCallBack?.()
    })

  }
四、整个鸿蒙融云Demo源码结构图:

在这里插入图片描述有问题或者需要完整源码的私信我


http://www.kler.cn/a/373618.html

相关文章:

  • JVM之垃圾回收器概述(续)的详细解析
  • 《Spring Framework实战》3:概览
  • 交响曲-24-3-单细胞CNV分析及聚类
  • 2025年第三届“华数杯”国际赛A题解题思路与代码(Python版)
  • 【黑马程序员三国疫情折线图——json+pyechart=数据可视化】
  • Autoencoder(李宏毅)机器学习 2023 Spring HW8 (Boss Baseline)
  • 正则表达式:文本处理的强大工具
  • docker load镜像失败,提示没有足够的空间,处理办法
  • 38.第二阶段x86游戏实战2-HOOK窗口消息机制(解决多开窗口句柄问题)
  • 【渗透测试】01-信息收集-名词概念
  • 和鲸科技同南京大学地理与海洋科学学院签署和鲸“101 数智领航计划”合作协议,助力“地理海洋科学+AI”人才培养
  • 蚂蚁Ant Design:设计师的理想工具
  • Rust 力扣 - 189. 轮转数组
  • Three.js 快速入门构建你的第一个 3D 应用
  • 简易记事本项目开发(SSM框架)
  • 动态规划-回文串问题——647.回文子串
  • 奥数与C++小学四年级(第十一题 试商)
  • unseping攻防世界
  • 推荐:自然语言处理方向的一些创新点
  • 基于SSM+微信小程序的跑腿平台管理系统(跑腿3)
  • [OceanBase-不止于记录]:揭秘双引擎战略,共探AI时代数据架构未来
  • 聚水潭数据集成MySQL:高效组合装商品查询案例
  • 文心一言 VS 讯飞星火 VS chatgpt (381)-- 算法导论24.5 1题
  • 机器学习算法工程师笔试选择题(2)
  • 前端文件上传组件流程的封装
  • OpenGL入门001——使用glad和glfw创建一个窗口