Table of Contents

使用您的小程序录制 dump 文件

本文介绍了如何在小程序中实现 AR Session dump 数据的录制及转发。

开始之前

实现方法

以使用一个 Switch 组件为例来控制录制的开始与结束,并在结束后调用微信原生分享功能。

编写 WXML 界面

在小程序页面添加一个用于控制开始记录和结束并转发记录的表单组件 Switch

<switch class="switch" checked="{{dumpSessionFlag}}" bindchange="dumpSessionChange">记录数据</switch>

页面逻辑控制

在这个例子中,微信小程序界面上将出现一个名称为“记录数据”的开关,它的状态绑定了小程序中的 dumpSessionFlag,它绑定了小程序中的回调函数 dumpSessionChange,在小程序 ts 代码中需实现:

ar: null,
data: {
    //表单组件的初始状态为 关闭
    dumpSessionFlag:false,
},
onReady() {
    //获取场景中的 xr-frame 组件
    this.ar = this.selectComponent("#ar-scene");
}
dumpSessionChange(event) {
    //按钮触发时切换表单组件的显示
    this.setData({
        "dumpSessionFlag":event.detail.value
    });
    if (this.ar) {
        //调用 xr-frame 组件提供的方法
        this.ar.dumpSession(event.detail.value);
    }
},

实现核心录制逻辑 (xr-frame 组件内)

通过调用 session.dumpSession(signal: boolean) 接口控制记录流程:

  • 传入 true:启动记录。
  • 传入 false:停止记录,并返回生成的 文件临时路径 (tempFilePath)

在开始记录时可以通过 wx.showToast() 方法提示记录开始,在记录结束时通过 wx.shareFileMessage() 方法将记录的文件通过微信聊天转发。

/**
 * 处理 Session 记录逻辑
 * @param signal true 为开始记录,false 为结束记录并转发
 */
dumpSession(signal: boolean): void {
  // 调用接口获取路径
  const recordPath = session.dumpSession(signal);
  // signal 为 true 时,接口返回空字符串,表示正在记录
  if (recordPath.length == 0) {
      wx.showToast({
          title: '开始记录数据',
          icon: 'success',
          duration: 2000
      });
      return;
  }
  // signal 为 false 时,处理返回的文件路径
  wx.shareFileMessage({
      filePath: recordPath,
      success() {
          wx.showToast({
              title: '记录转发成功',
              icon: 'success',
              duration: 2000
          });
      },
      fail() {
          wx.showToast({
              title: '记录转发失败',
              icon: 'error',
              duration: 2000
          });
      }
  })
}
注意

由于小程序本地空间限制(通常为 200MB),建议单次录制时间不要过长,且最长录制时间不能超过 10 分钟。