Table of Contents

Gravar arquivos dump com seu mini-programa

Este artigo explica como implementar a gravação e o encaminhamento de dados de dump da sessão AR em mini-programas.

Antes de começar

Método de implementação

Tomando como exemplo o uso de um componente Switch para controlar o início e o fim da gravação, e invocar a função de compartilhamento nativa do WeChat após o término.

Escrever a interface WXML

Adicione um componente Switch à página do mini-programa para controlar o início e o fim da gravação com compartilhamento.

<switch class="switch" checked="{{dumpSessionFlag}}" bindchange="dumpSessionChange">Gravar dados</switch>

Controle lógico da página

Neste exemplo, um interruptor chamado "Gravar dados" aparecerá na interface do mini-programa. Seu estado está vinculado a dumpSessionFlag no mini-programa e à função de retorno dumpSessionChange. O código ts do mini-programa deve implementar:

ar: null,
data: {
    //Estado inicial do componente de formulário: desligado
    dumpSessionFlag:false,
},
onReady() {
    //Obter o componente xr-frame da cena
    this.ar = this.selectComponent("#ar-scene");
}
dumpSessionChange(event) {
    //Alternar a exibição do componente quando o botão é acionado
    this.setData({
        "dumpSessionFlag":event.detail.value
    });
    if (this.ar) {
        //Chamar o método fornecido pelo componente xr-frame
        this.ar.dumpSession(event.detail.value);
    }
},

Implementar a lógica central de gravação (dentro do componente xr-frame)

Controle o fluxo de gravação chamando a interface session.dumpSession(signal: boolean):

  • Passe true: inicia a gravação.
  • Passe false: para a gravação e retorna o caminho temporário do arquivo (tempFilePath).

Ao iniciar a gravação, use wx.showToast() para notificar o início. Ao terminar, use wx.shareFileMessage() para encaminhar o arquivo via chat do WeChat.

/**
 * Processar a lógica de gravação da sessão
 * @param signal true para iniciar gravação, false para parar e encaminhar
 */
dumpSession(signal: boolean): void {
  // Chamar interface para obter caminho
  const recordPath = session.dumpSession(signal);
  // Quando signal é true, retorna string vazia (gravação em andamento)
  if (recordPath.length == 0) {
      wx.showToast({
          title: 'Iniciando gravação de dados',
          icon: 'success',
          duration: 2000
      });
      return;
  }
  // Quando signal é false, processar o caminho retornado
  wx.shareFileMessage({
      filePath: recordPath,
      success() {
          wx.showToast({
              title: 'Gravação compartilhada com sucesso',
              icon: 'success',
              duration: 2000
          });
      },
      fail() {
          wx.showToast({
              title: 'Falha ao compartilhar gravação',
              icon: 'error',
              duration: 2000
          });
      }
  })
}
Nota

Devido ao limite de espaço local do mini-programa (normalmente 200MB), recomenda-se que cada gravação não seja muito longa. O tempo máximo de gravação não pode exceder 10 minutos.