【发布时间】:2020-10-27 21:08:27
【问题描述】:
我正在尝试捕获 Android 记录并将其发送到 Firebase 存储。我似乎正在输出音频文件(如日志所示,它不为空),并且发生了 Firebase 上传。但是,上传是空的。我怀疑这个问题发生在我如何保存输出和将其转换为字节数组之间。另外,我对字节数组以及如何使用它们知之甚少,所以我可能会遗漏一些明显的东西。 我也在片段中运行所有这些。
fileName = Objects.requireNonNull(Objects.requireNonNull(getActivity()).getExternalCacheDir()).getAbsolutePath();
fileName += "/audiorecordtest.3gp";
当我按下开始时,我运行这个:
recorder = new MediaRecorder();
recorder.setAudioSource(MediaRecorder.AudioSource.MIC);
recorder.setOutputFormat(MediaRecorder.OutputFormat.THREE_GPP);
recorder.setOutputFile(fileName);
recorder.setAudioEncoder(MediaRecorder.AudioEncoder.AMR_NB);
try {
recorder.prepare();
} catch (IOException e) {
Log.e(TAG, "prepare() failed");
}
recorder.start();
当我按下停止时,我运行这个:
recorder.stop();
recorder.release();
recorder = null;
然后我准备 Firebase 上传录音:
StorageMetadata metadata = new StorageMetadata.Builder()
.setContentType("audio/mpeg")
.build();
UploadTask uploadTask = voiceRef.child(newMessage).putBytes(fileName.getBytes(), metadata);
如果需要,这里是完整的 Firebase 上传:
uploadTask.addOnProgressListener(new OnProgressListener<UploadTask.TaskSnapshot>() {
@Override
public void onProgress(UploadTask.TaskSnapshot taskSnapshot) {
double progress = (100.0 * taskSnapshot.getBytesTransferred()) / taskSnapshot.getTotalByteCount();
//int progressInt = (int) progress;
System.out.println("Upload is " + progress + "% done");
//progressBar.setProgress(progressInt);
}
}).addOnPausedListener(new OnPausedListener<UploadTask.TaskSnapshot>() {
@Override
public void onPaused(UploadTask.TaskSnapshot taskSnapshot) {
System.out.println("Upload is paused");
}
}).addOnFailureListener(new OnFailureListener() {
@Override
public void onFailure(@NonNull Exception exception) {
System.out.println("Upload Failed! Please try again.");
}
}).addOnSuccessListener(new OnSuccessListener<UploadTask.TaskSnapshot>() {
@Override
public void onSuccess(UploadTask.TaskSnapshot taskSnapshot) {
voiceRef.child(newMessage).getDownloadUrl().addOnSuccessListener(new OnSuccessListener<Uri>() {
@Override
public void onSuccess(Uri uri) {
Message.Voice voice = new Message.Voice(uri.toString(), timeInt);
Author author = new Author(UserID, UserName, null, false); //UserID, UserName
Message message = new Message(newMessage, author, UserID, null, "sent", Header, null);
message.setVoice(voice);
//The completion listener is added here as this prevents an odd occurrencee of the onChildListener
//in the messages fragment firing twice when this activity is exited too quickly.
myMessageRoomRef.child(newMessage).setValue(message, new DatabaseReference.CompletionListener() {
@Override
public void onComplete(DatabaseError databaseError, @NonNull DatabaseReference databaseReference) {
if (databaseError != null) {
System.out.println("Data could not be saved " + databaseError.getMessage());
} else {
System.out.println("Data saved successfully.");
Objects.requireNonNull(getActivity()).finish();
}
}
});
}
});
}
});
【问题讨论】:
标签: android arrays file firebase-storage mediarecorder