音频文件未上载到Firebase存储



以下是代码:

public class AddFragment extends Fragment {
private Button btn_taptorecord;
Boolean isRecording = false;
private String recordPermission = Manifest.permission.RECORD_AUDIO;
private String recordFile;
ProgressDialog progressDialog;
private MediaRecorder mediaRecorder;
StorageReference audioReference;
private int PERMISSION_CODE = 7;

public AddFragment() {
// Required empty public constructor
}
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
// Inflate the layout for this fragment
return inflater.inflate(R.layout.fragment_add, container, false);
}
@Override
public void onViewCreated(@NonNull View view, @Nullable Bundle savedInstanceState) {
super.onViewCreated(view, savedInstanceState);
btn_taptorecord = view.findViewById(R.id.btn_taptorecord);
audioReference = FirebaseStorage.getInstance().getReference();
progressDialog = new ProgressDialog(getContext());
btn_taptorecord.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
if (isRecording) {
//stop recording
stopRecording();
isRecording = false;
}
else {
//start recording
startRecording();
if (checkPermissions()) {
isRecording = true;
}
}
}
});
}
private void stopRecording() {
mediaRecorder.stop();
mediaRecorder.release();
mediaRecorder = null;
uploadAudio();
}
private void uploadAudio() {
progressDialog.setMessage("Uploading...");
progressDialog.show();
String recordPath = getActivity().getExternalFilesDir("/").getAbsolutePath();
Uri uri = Uri.fromFile(new File(recordPath));
StorageReference filePath = audioReference.child("Audio").child(uri.getLastPathSegment());
filePath.putFile(uri).addOnSuccessListener(new OnSuccessListener<UploadTask.TaskSnapshot>() {
@Override
public void onSuccess(UploadTask.TaskSnapshot taskSnapshot) {
progressDialog.dismiss();
}
});
}

private void startRecording() {
SimpleDateFormat formatter = new SimpleDateFormat("yyyy_MM_dd_hh_mm_ss", Locale.TAIWAN);
String recordPath = getActivity().getExternalFilesDir("/").getAbsolutePath();
Date date = new Date();
recordFile = "Heart Leaf" + formatter.format(date) + ".3gp";
mediaRecorder = new MediaRecorder();
mediaRecorder.setAudioSource(MediaRecorder.AudioSource.MIC);
mediaRecorder.setOutputFormat(MediaRecorder.OutputFormat.THREE_GPP);
mediaRecorder.setOutputFile(recordPath + "/" + recordFile);
mediaRecorder.setAudioEncoder(MediaRecorder.AudioEncoder.AMR_NB);
try {
mediaRecorder.prepare();
} catch (IOException e) {
e.printStackTrace();
}
mediaRecorder.start();
}
private boolean checkPermissions() {
if (ActivityCompat.checkSelfPermission(getContext(), recordPermission) == PackageManager.PERMISSION_GRANTED) {
return true;
}
else {
ActivityCompat.requestPermissions(getActivity(), new String[]{recordPermission}, PERMISSION_CODE);
return false;
}
}
}

一切都很正常,但当我上传录制的音频文件时,它没有上传。我发现故障在以下线路上:

filePath.putFile(uri).addOnSuccessListener(new OnSuccessListener<UploadTask.TaskSnapshot>() {
@Override
public void onSuccess(UploadTask.TaskSnapshot taskSnapshot) {
progressDialog.dismiss();
}
});

但我无法找到错误是什么,以及为什么我无法将音频文件完美上传到Firebase数据库。

您可以使用

filePath.putFile(uri)
.addOnFailureListener(new OnFailureListener() {
@Override
public void onFailure(@NonNull Exception exception) {
// print your exception here
}
})
.addOnSuccessListener(new OnSuccessListener<UploadTask.TaskSnapshot>() {
@Override
public void onSuccess(UploadTask.TaskSnapshot taskSnapshot) {
progressDialog.dismiss();
}
})

但正如我所看到的,你试图上传一个文件夹而不是一个文件。以下是您需要做的操作。声明成员

var recordingPath: Uri = null

在函数startRecording((的末尾添加此行,将URL保存到文件

private void startRecording() {
...
recordingPath = Uri.fromFile(new File(recordPath + "/" + recordFile));
}

所以你可以在上传时使用它

private void uploadAudio() {
progressDialog.setMessage("Uploading...");
progressDialog.show();
Uri uri = recordingPath
StorageReference filePath = audioReference.child("Audio").child(uri.getLastPathSegment());
filePath.putFile(uri).addOnSuccessListener(new OnSuccessListener<UploadTask.TaskSnapshot>() {
@Override
public void onSuccess(UploadTask.TaskSnapshot taskSnapshot) {
progressDialog.dismiss();
}
});
}

最新更新