android - 想要在 firebase 上上传通话录音但没有发生
问题描述
我想在 firebase 上自动上传我的录音,因为我已经提供了它们的存储路径。在日志中显示了路径,但是当将相同的路径传递给 uri 时,它说:“找不到用于上传 E/StorageException 的文件:发生 StorageException。发生未知错误,请检查服务器的 HTTP 结果代码和内部异常回复”
这是调试应用程序的屏幕截图: https ://i.stack.imgur.com/1sUD9.png
这是recorderservice类的代码:
public class RecorderService extends Service {
MediaRecorder recorder;
static final String TAGS = " Inside Service";
private StorageReference mstorage;
private String filen = null;
@Override
public IBinder onBind(Intent intent) {
return null;
}
//filen = Environment.getExternalStorageDirectory()
public int onStartCommand(Intent intent, int flags, int startId) {
//filen = Environment.getExternalStorageDirectory() + "/My Records/";
//filen = "recorded_audio.3gp";
mstorage = FirebaseStorage.getInstance().getReference();
recorder = new MediaRecorder();
recorder.reset();
String phoneNumber = intent.getStringExtra("number");
Log.d(TAGS, "Phone number in service: " + phoneNumber);
String time = new CommonMethods().getTIme();
String path = new CommonMethods().getPath();
String rec = path + "/" + phoneNumber + "_" + time + ".mp4";
recorder.setAudioSource(MediaRecorder.AudioSource.MIC);
recorder.setOutputFormat(MediaRecorder.OutputFormat.MPEG_4);
recorder.setAudioEncoder(MediaRecorder.AudioEncoder.AAC);
recorder.setOutputFile(rec);
try {
recorder.prepare();
} catch (IOException e) {
e.printStackTrace();
}
recorder.start();
Log.d(TAGS, "onStartCommand: " + "Recording started");
return START_NOT_STICKY;
}
public void onDestroy() {
//uploadAudio();
super.onDestroy();
recorder.stop();
recorder.reset();
recorder.release();
recorder = null;
Log.d(TAGS, "onDestroy: " + "Recording stopped");
uploadAudio();
}
private void uploadAudio() {
//String path = new CommonMethods().getPath();
//String rec = path ;
File file=new File(Environment.getExternalStorageDirectory()+"/My Records/");
String path=file.getAbsolutePath();
Log.d(TAGS,"uploadAudio:" + file);
Log.d(TAGS,"lets see:" + path);
//Log.d(TAGS,"wecandoit:" +rec);
StorageReference filepath = mstorage.child("Audio").child("new_audio.3gp"); // change it to give name of recording
Uri uri = Uri.fromFile(new File(path));
filepath.putFile(uri).addOnSuccessListener(new OnSuccessListener<UploadTask.TaskSnapshot>() {
@Override
public void onSuccess(UploadTask.TaskSnapshot taskSnapshot) {
Toast.makeText(getApplicationContext(),"uploading",Toast.LENGTH_SHORT).show();
}
})
.addOnFailureListener(new OnFailureListener() {
@Override
public void onFailure(@NonNull Exception e) {
//Log.d(TAGS,"uploadAudio:"+ rec);
Toast.makeText(getApplicationContext(),"error",Toast.LENGTH_SHORT).show();
}
});
}
}
解决方案
尝试这个。
//Call this wherever you want to start recording.
recordAudio("/TestRecording.mp4");
public void recordAudio(String fileName) {
final MediaRecorder recorder = new MediaRecorder();
ContentValues values = new ContentValues(3);
values.put(MediaStore.MediaColumns.TITLE, fileName);
recorder.setAudioSource(MediaRecorder.AudioSource.MIC);
recorder.setOutputFormat(MediaRecorder.OutputFormat.MPEG_4);
recorder.setAudioEncoder(MediaRecorder.AudioEncoder.DEFAULT);
final File file = new File(Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_MOVIES)+"/"+fileName);
recorder.setOutputFile(file);
try {
recorder.prepare();
} catch (Exception e){
e.printStackTrace();
}
final android.app.ProgressDialog mProgressDialog = new android.app.ProgressDialog(this);
mProgressDialog.setTitle("Recording");
mProgressDialog.setProgressStyle(ProgressDialog.STYLE_NORMAL);
mProgressDialog.setButton("Stop recording", new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int whichButton) {
mProgressDialog.dismiss();
recorder.stop();
recorder.release();
Uri uri = Uri.fromFile(file);
StorageReference filepath = mstorage.child("Audio").child("new_audio.mp4");
///UPLOAD HERE
mProgressDialog.setOnCancelListener(new DialogInterface.OnCancelListener(){
public void onCancel(DialogInterface p1) {
recorder.stop();
recorder.release();
}
});
recorder.start();
mProgressDialog.show();
}
推荐阅读
- android - 无法创建所需的布局 xml (Android)
- visual-studio - 从 VS 2013 到 VS 2017 的电话簿 GUI 转换不起作用
- mongodb - mac导出路径不断重置
- android - Android TextInputEditText,inputType = textPassword,我看不到点
- php - 如果 PHP 中的时间相同,则将总数和设备添加到一个数组中
- mysql - MySQL:基于另一个并不总是具有匹配值的连接表进行排序
- android - 如何为 Launcher3 默认工作区设置最喜欢的应用程序 - Android Source
- css - 将图像放入使用纯 CSS 完成的基本梯形?
- c++ - 将 ProcessEntry32.szExeFile 与用户输入的数据进行比较时,C++ _wcsicmp 代码未编译
- javascript - 你如何让用户在 html 中为 select 标签选择默认值?