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