Table of Contents

Запись dump-файлов с помощью вашей мини-программы

В этой статье описано, как реализовать запись и пересылку данных AR Session dump в мини-программе.

Перед началом

Способ реализации

В качестве примера используется компонент Switch для управления началом и окончанием записи, а после завершения записи вызывается встроенная функция отправки WeChat.

Написание интерфейса WXML

Добавьте на страницу мини-программы компонент формы Switch, который используется для управления началом записи, завершением и пересылкой записи.

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

Управление логикой страницы

В этом примере в интерфейсе WeChat Mini Program появится переключатель с именем "Record data". Его состояние привязано к dumpSessionFlag в мини-программе, и он привязан к callback-функции 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(), чтобы переслать записанный файл через чат WeChat.

/**
 * обработка логики записи 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
          });
      }
  })
}
Примечание

Из-за ограничения локального пространства мини-программы, обычно 200 MB, рекомендуется не делать одну запись слишком длинной, а максимальная длительность записи не должна превышать 10 минут.