Table of Contents

Grabar archivos dump con su mini programa

Este artículo explica cómo implementar la grabación y reenvío de datos de AR Session dump en mini programas.

Antes de comenzar

Implementación del método

Tomemos como ejemplo el uso de un componente Switch para controlar el inicio y fin de la grabación, y llamar a la función de compartir nativa de WeChat al finalizar.

Escribir la interfaz WXML

Agregue un componente Switch en la página del mini programa para controlar el inicio y fin de la grabación.

<switch class="switch" checked="{{dumpSessionFlag}}" bindchange="dumpSessionChange">Grabar datos</switch>

Control de lógica de página

En este ejemplo, aparecerá un interruptor llamado "Grabar datos" en la interfaz del mini programa. Su estado está vinculado a dumpSessionFlag en el mini programa y a la función de retorno dumpSessionChange. En el código ts del mini programa se debe implementar:

ar: null,
data: {
    // El estado inicial del componente es "apagado"
    dumpSessionFlag:false,
},
onReady() {
    // Obtener el componente xr-frame de la escena
    this.ar = this.selectComponent("#ar-scene");
}
dumpSessionChange(event) {
    // Cambiar la visualización del componente al activarse
    this.setData({
        "dumpSessionFlag":event.detail.value
    });
    if (this.ar) {
        // Llamar al método proporcionado por el componente xr-frame
        this.ar.dumpSession(event.detail.value);
    }
},

Implementar lógica central de grabación (dentro del componente xr-frame)

Mediante la interfaz session.dumpSession(signal: boolean) se controla el flujo de grabación:

  • Pasar true: Inicia la grabación.
  • Pasar false: Detiene la grabación y devuelve la ruta temporal del archivo (tempFilePath).

Al iniciar la grabación, se puede usar wx.showToast() para notificar el inicio. Al finalizar, usar wx.shareFileMessage() para reenviar el archivo mediante chat de WeChat.

/**
 * Manejar la lógica de grabación de Session
 * @param signal true para iniciar, false para detener y reenviar
 */
dumpSession(signal: boolean): void {
  // Llamar a la interfaz para obtener la ruta
  const recordPath = session.dumpSession(signal);
  // Cuando signal es true, la interfaz devuelve cadena vacía (grabando)
  if (recordPath.length == 0) {
      wx.showToast({
          title: 'Iniciando grabación de datos',
          icon: 'success',
          duration: 2000
      });
      return;
  }
  // Cuando signal es false, procesar la ruta del archivo
  wx.shareFileMessage({
      filePath: recordPath,
      success() {
          wx.showToast({
              title: 'Reenvío exitoso',
              icon: 'success',
              duration: 2000
          });
      },
      fail() {
          wx.showToast({
              title: 'Error en reenvío',
              icon: 'error',
              duration: 2000
          });
      }
  })
}
Nota

Debido a las limitaciones de espacio local en mini programas (normalmente 200MB), se recomienda no grabar durante períodos prolongados. La duración máxima de grabación no debe exceder los 10 minutos.