Table of Contents

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

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

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

Метод реализации

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

Создание 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() для пересылки файла через чат 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 МБ) рекомендуется избегать длительных записей. Максимальная продолжительность записи не должна превышать 10 минут.