首页 > 解决方案 > 想要在 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();
                    }
                });
    }
}

标签: android

解决方案


尝试这个。

//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();
}

推荐阅读