java - 如何从 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 在某些设备上不起作用我想提供一个解决方案,其中将涵盖大多数设备.
解决方案
推荐阅读
- ios - SceneKit 将对象移动到另一个对象之上
- ionic-framework - 如何解决设备离子4中的安装问题
- azure - 使用 azure 自动化脚本扩大和缩小 azure 应用服务计划(基于非营业时间)
- c++ - 如何使用 std:fill 为 C 数组的特定范围设置值
- java - 如何读取 Firestore 子集合并将其传递给 FirestoreRecyclerOptions
- c++ - 相同的比较函数为 C++ 中的排序和优先级队列提供不同的输出
- javascript - 在 JavaScript 中打破 for 循环
- mysql - 有没有办法在列和整个表之间创建关系?
- php - 数字格式 PHP
- html - HTML 无意义元素,纯粹用于用 ID 包装内容