📜  Android MediaRecorder示例

📅  最后修改于: 2020-10-10 01:31:05             🧑  作者: Mango

Android MediaRecorder示例

MediaRecorder类可用于记录音频和视频文件。

录制媒体后,我们可以创建一个声音文件,以便以后播放。

在此示例中,我们将记录音频文件并将其以3gp格式存储在外部目录中。

activity_main.xml

从面板上拖动2个按钮,一个开始录制,另一个停止录制。在这里,我们使用android:onClick在XML文件中向侦听器注册视图。



    

活动课

package com.javatpoint.mediarecorder;
import java.io.File;
import java.io.IOException;
import android.app.Activity;
import android.content.ContentResolver;
import android.content.ContentValues;
import android.content.Intent;
import android.media.MediaRecorder;
import android.net.Uri;
import android.os.Bundle;
import android.os.Environment;
import android.provider.MediaStore;
import android.util.Log;
import android.view.View;
import android.widget.Button;
import android.widget.Toast;

public class MainActivity extends Activity {
  MediaRecorder recorder;
  File audiofile = null;
  static final String TAG = "MediaRecording";
  Button startButton,stopButton;

  @Override
  public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    startButton = (Button) findViewById(R.id.button1);
    stopButton = (Button) findViewById(R.id.button2);
  }

  public void startRecording(View view) throws IOException {
    startButton.setEnabled(false);
    stopButton.setEnabled(true);
            //Creating file
    File dir = Environment.getExternalStorageDirectory();
    try {
      audiofile = File.createTempFile("sound", ".3gp", dir);
    } catch (IOException e) {
      Log.e(TAG, "external storage access error");
      return;
    }
            //Creating MediaRecorder and specifying audio source, output format, encoder & output format
    recorder = new MediaRecorder();
    recorder.setAudioSource(MediaRecorder.AudioSource.MIC);
    recorder.setOutputFormat(MediaRecorder.OutputFormat.THREE_GPP);
    recorder.setAudioEncoder(MediaRecorder.AudioEncoder.AMR_NB);
    recorder.setOutputFile(audiofile.getAbsolutePath());
    recorder.prepare();
    recorder.start();
  }

  public void stopRecording(View view) {
    startButton.setEnabled(true);
    stopButton.setEnabled(false);
            //stopping recorder
    recorder.stop();
    recorder.release();
           //after stopping the recorder, create the sound file and add it to media library.
    addRecordingToMediaLibrary();
  }

  protected void addRecordingToMediaLibrary() {
            //creating content values of size 4
    ContentValues values = new ContentValues(4);
    long current = System.currentTimeMillis();
    values.put(MediaStore.Audio.Media.TITLE, "audio" + audiofile.getName());
    values.put(MediaStore.Audio.Media.DATE_ADDED, (int) (current / 1000));
    values.put(MediaStore.Audio.Media.MIME_TYPE, "audio/3gpp");
    values.put(MediaStore.Audio.Media.DATA, audiofile.getAbsolutePath());
         
             //creating content resolver and storing it in the external content uri
    ContentResolver contentResolver = getContentResolver();
    Uri base = MediaStore.Audio.Media.EXTERNAL_CONTENT_URI;
    Uri newUri = contentResolver.insert(base, values);

           //sending broadcast message to scan the media file so that it can be available
    sendBroadcast(new Intent(Intent.ACTION_MEDIA_SCANNER_SCAN_FILE, newUri));
    Toast.makeText(this, "Added File " + newUri, Toast.LENGTH_LONG).show();
  }
} 

输出: