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 分鐘。