温馨提示×

android mediarecorder如何录制音频

小樊
87
2024-11-20 07:57:16
栏目: 编程语言

在Android中,使用MediaRecorder类来录制音频需要遵循以下步骤:

  1. 获取必要的权限: 在AndroidManifest.xml文件中添加录音权限:

    <uses-permission android:name="android.permission.RECORD_AUDIO" />
    <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
    
  2. 检查并请求权限(针对Android 6.0及以上版本): 在运行时检查并请求录音权限。

    private static final int REQUEST_RECORD_AUDIO_PERMISSION = 200;
    
    private void requestRecordAudioPermission() {
        if (ContextCompat.checkSelfPermission(this, Manifest.permission.RECORD_AUDIO) != PackageManager.PERMISSION_GRANTED) {
            ActivityCompat.requestPermissions(this, new String[]{Manifest.permission.RECORD_AUDIO}, REQUEST_RECORD_AUDIO_PERMISSION);
        } else {
            startRecording();
        }
    }
    
    @Override
    public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) {
        if (requestCode == REQUEST_RECORD_AUDIO_PERMISSION) {
            if (grantResults.length > 0 && grantResults[0] == PackageManager.PERMISSION_GRANTED) {
                startRecording();
            } else {
                Toast.makeText(this, "Permission denied to record audio", Toast.LENGTH_SHORT).show();
            }
        }
    }
    
  3. 配置MediaRecorder

    private MediaRecorder mediaRecorder;
    private String filePath;
    
    private void startRecording() {
        filePath = Environment.getExternalStorageDirectory().getAbsolutePath() + "/recording.3gp";
    
        mediaRecorder = new MediaRecorder();
        mediaRecorder.setAudioSource(MediaRecorder.AudioSource.MIC);
        mediaRecorder.setOutputFormat(MediaRecorder.OutputFormat.THREE_GPP);
        mediaRecorder.setAudioEncoder(MediaRecorder.AudioEncoder.AMR_NB);
        mediaRecorder.setOutputFile(filePath);
    
        try {
            mediaRecorder.prepare();
            mediaRecorder.start();
            Toast.makeText(this, "Recording started", Toast.LENGTH_SHORT).show();
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
    
  4. 停止录制

    private void stopRecording() {
        if (mediaRecorder != null) {
            mediaRecorder.stop();
            mediaRecorder.release();
            mediaRecorder = null;
            Toast.makeText(this, "Recording stopped", Toast.LENGTH_SHORT).show();
        }
    }
    
  5. 处理权限请求结果: 在Activity中重写onRequestPermissionsResult方法来处理权限请求结果。

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
    
        Button startButton = findViewById(R.id.start_button);
        Button stopButton = findViewById(R.id.stop_button);
    
        startButton.setOnClickListener(v -> requestRecordAudioPermission());
        stopButton.setOnClickListener(v -> stopRecording());
    }
    
  6. 处理权限请求结果: 在Activity中重写onRequestPermissionsResult方法来处理权限请求结果。

    @Override
    public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) {
        if (requestCode == REQUEST_RECORD_AUDIO_PERMISSION) {
            if (grantResults.length > 0 && grantResults[0] == PackageManager.PERMISSION_GRANTED) {
                startRecording();
            } else {
                Toast.makeText(this, "Permission denied to record audio", Toast.LENGTH_SHORT).show();
            }
        }
    }
    

通过以上步骤,你可以在Android应用中使用MediaRecorder类录制音频。请确保在实际应用中处理所有可能的错误情况,并提供用户友好的反馈。

0