首页 > 解决方案 > 如何从 java 类中获取数据到反应本机应用程序中

问题描述

我正在尝试为用户启动媒体记录器,如果媒体记录器失败,我将使用其他配置重试。

private String fileFormat;
private boolean setupAudio(String path, String file){
      mediaRecorder = new MediaRecorder();
      boolean isWorking = false;
      for(short preset = 0; preset < 3 ; preset++) {
        try {
          mediaRecorder.reset();
          int[] tryConfig = getConfig(preset);
          String fileExtention;
          if(tryConfig[2] == 4){
            fileExtention = ".mp4";
          }else{
            fileExtention = ".aac";
          }
          fileFormat = fileExtention;
          mediaRecorder.setAudioSource(MediaRecorder.AudioSource.MIC);
          mediaRecorder.setOutputFormat(tryConfig[0]);
          mediaRecorder.setAudioEncoder(tryConfig[1]);
          mediaRecorder.setOutputFile(path + '/' + file + fileExtention);
          mediaRecorder.prepare();
          mediaRecorder.start();
          isWorking = true;
          break;
        }
        catch(Exception e){
          e.printStackTrace();
        }
      }
      return isWorking;
    }

private int[] getConfig(short preset){
      int[] config = new int[3];
      switch (preset){
        case 2:
          config[0] = MediaRecorder.OutputFormat.MPEG_4;
          config[1] = MediaRecorder.AudioEncoder.HE_AAC;
          config[2] = 4;
          break;

        case 1:
          config[0] = MediaRecorder.OutputFormat.DEFAULT;
          config[1] = MediaRecorder.AudioEncoder.DEFAULT;
          config[2] = 3;
          break;

        case 0:
          // config[0] = MediaRecorder.OutputFormat.THREE_GPP;
          // config[1] = MediaRecorder.AudioEncoder.AMR_NB;
          // config[2] = 3;
          config[0] = MediaRecorder.OutputFormat.AAC_ADTS;
          config[1] = MediaRecorder.AudioEncoder.HE_AAC;
          config[2] = 2;
          break;
      }
      return config;
    }

我想要的是我需要一个辅助函数,它可以告诉我使用了哪个文件格式(因为我不知道会选择哪个预设),比如它是 3gp、mp4 还是其他东西。为此,我添加了此代码

@ReactMethod(isBlockingSynchronousMethod = true)
    public String getFileFormat(){
        return fileFormat;
    }

所以在我启动我的录音机后,我看到我的应用程序在我第一次启动录音机时没有返回任何内容。但是当我下次启动它时,它会按预期返回 .3gp。

我用于获取的 react-native 代码:

getFormat = async (recorderObj) => {
    const response = await recorderObj.getFileFormat();
    return response;
  };

任何帮助,将不胜感激。另外,如果可能的话,请提及您认为适用于大多数设备的一些音频编码器和输出格式,因为我正在执行此代码,因为输出格式 MPEG_4 和音频编码器 HE_AAC 在某些设备上不起作用我想提供一个解决方案,其中将涵盖大多数设备.

标签: javaandroidreact-nativeasynchronousreact-native-android

解决方案


推荐阅读