首页 > 解决方案 > 音频文件通过 Java mediarecoder 录制后无法播放

问题描述

我是安卓开发新手。我使用以下代码录制和播放音频,应用程序通过 Java 媒体记录器录制音频,它录制音频但不播放音频。IDE 没有显示任何代码错误,但是当我单击播放按钮时,音频文件没有播放。即媒体播放器不工作。

import androidx.annotation.NonNull;
import androidx.appcompat.app.AppCompatActivity;
import androidx.core.app.ActivityCompat;
import androidx.core.content.ContextCompat;

import android.Manifest;

import android.annotation.SuppressLint;
import android.content.pm.PackageManager;
import android.media.MediaPlayer;
import android.media.MediaRecorder;
import android.os.Bundle;
import android.os.Environment;
import android.view.View;
import android.widget.Button;
import android.widget.Toast;

import java.io.IOException;
import java.util.UUID;

import static android.os.Environment.getExternalStorageDirectory;


public class rec_ingress extends AppCompatActivity {

    private Button btnStopRecording, btnRecord, btnPlay, btnStop;
    private String pathSave = "";
    private MediaRecorder mediaRecorder;
    private MediaPlayer mediaPlayer;


    final int REQUEST_PERMISSION_CODE=1000;

    @SuppressLint("ShowToast")
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_rec_ingress);

        if(!checkPermissionFromDevice())
            requestPermissions();

        btnRecord =findViewById(R.id.Recbtn);
        btnPlay =findViewById(R.id.playbtn);
        btnStopRecording =findViewById(R.id.stopRecbtn);
        btnStop =findViewById(R.id.pausebtn);

        //runtime Permission Request form android manifest

            btnRecord.setOnClickListener(new View.OnClickListener()
            {
                @Override
                public void onClick(View v) {
                    if (checkPermissionFromDevice())
                    {


                   /* pathSave = Environment.getExternalStorageDirectory()
                            .getAbsolutePath()+"/"
                            +UUID.randomUUID().toString()+"_steth19_.mpg";*/
                        pathSave= getExternalStorageDirectory().getAbsolutePath();
                        pathSave += "/audiorecordtest.3gp";

                    setupMediaRecorder();
                    try {
                        mediaRecorder.prepare();
                        mediaRecorder.start();
                    } catch (IOException e) {
                        e.printStackTrace();
                        Toast.makeText(rec_ingress.this,e.getMessage(), Toast.LENGTH_SHORT);
                        e.getMessage();
                    }
                    btnPlay.setEnabled(false);
                    btnStop.setEnabled(false);

                    Toast.makeText(rec_ingress.this, "Recording Started", Toast.LENGTH_SHORT).show();

                }
                }

                {
                    requestPermissions();
                }
            });
            btnStopRecording.setOnClickListener(v -> {
                mediaRecorder.stop();
                btnStopRecording.setEnabled(false);
                btnPlay.setEnabled(true);
                btnRecord.setEnabled(true);
                btnStop.setEnabled(false);

            });

            //Play Button
            btnPlay.setOnClickListener(v -> {

                btnStopRecording.setEnabled(false);
                btnStop.setEnabled(true);
                btnRecord.setEnabled(true);

                mediaPlayer = new MediaPlayer();
                try {
                    mediaPlayer.setDataSource(pathSave);
                    mediaPlayer.prepare();
                } catch (IOException e) {
                    e.printStackTrace();


                }
                mediaPlayer.start();
                Toast.makeText(rec_ingress.this, "Playing....", Toast.LENGTH_SHORT).show();
            });

                //stop button
                btnStop.setOnClickListener(v -> {

                    btnStopRecording.setEnabled(false);
                    btnPlay.setEnabled(true);
                    btnRecord.setEnabled(true);
                    btnStop.setEnabled(false);

                    if(mediaPlayer != null)
                    {
                        mediaPlayer.stop();
                        mediaPlayer.release();
                        setupMediaRecorder();
                        Toast.makeText(rec_ingress.this, "Stoped....", Toast.LENGTH_SHORT).show();

                    }
                });


    }

    private void setupMediaRecorder() {
        mediaRecorder =new MediaRecorder();
        mediaRecorder.setAudioSource(MediaRecorder.AudioSource.MIC);
        mediaRecorder.setOutputFormat(MediaRecorder.OutputFormat.THREE_GPP);
        mediaRecorder.setAudioEncoder(MediaRecorder.OutputFormat.AMR_NB);
        mediaRecorder.setOutputFile(pathSave);
    }
    private boolean checkPermissionFromDevice () {
        int write_external_storage_result = ContextCompat.checkSelfPermission(this, Manifest.permission.WRITE_EXTERNAL_STORAGE);
        int record_audio_results = ContextCompat.checkSelfPermission(this, Manifest.permission.RECORD_AUDIO);
        return write_external_storage_result == PackageManager.PERMISSION_GRANTED &&
                record_audio_results == PackageManager.PERMISSION_GRANTED;
    }



    private void requestPermissions() {
        ActivityCompat.requestPermissions(this, new String[]{
                Manifest.permission.WRITE_EXTERNAL_STORAGE,
                Manifest.permission.RECORD_AUDIO

        }, REQUEST_PERMISSION_CODE);
    }




        @Override
    public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) {
            super.onRequestPermissionsResult(requestCode, permissions, grantResults);
            if (requestCode == REQUEST_PERMISSION_CODE) {
                if (grantResults.length > 0 && grantResults[0] == PackageManager.PERMISSION_GRANTED)
                    Toast.makeText(this, "Permission Granted", Toast.LENGTH_SHORT).show();
                else
                    Toast.makeText(this, "Permission Denied", Toast.LENGTH_SHORT).show();
            }
    }
}

标签: javaandroidandroid-studioandroid-mediaplayerandroid-mediarecorder

解决方案


推荐阅读