首先申请应用权限

    <uses-permission android:name="android.permission.RECORD_AUDIO"/>    <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>

录音播放实现代码

public class AudioRecordTest extends Activity {private static final String LOG_TAG = "AudioRecordTest";private static String mFileName = null;private RecordButton mRecordButton = null;private MediaRecorder mRecorder = null;private PlayButton mPlayButton = null;private MediaPlayer mPlayer = null;/** * 开始或停止保存录音  */private void onRecord(boolean start) {if (start) {startRecording();} else {stopRecording();}}/** * 播放或停止播放录音  */private void onPlay(boolean start) {if (start) {startPlaying();} else {stopPlaying();}}private void startPlaying() {mPlayer = new MediaPlayer();try {mPlayer.setDataSource(mFileName);mPlayer.prepare();mPlayer.start();} catch (IOException e) {Log.e(LOG_TAG, "prepare() failed");}}private void stopPlaying() {mPlayer.release();mPlayer = null;}/** * 开始录音 */private void startRecording() {mRecorder = new MediaRecorder();mRecorder.setAudioSource(MediaRecorder.AudioSource.MIC);//RAW_AMR虽然被高版本废弃,但它兼容低版本还是可以用的mRecorder.setOutputFormat(MediaRecorder.OutputFormat.RAW_AMR);mRecorder.setOutputFile(mFileName);mRecorder.setAudioEncoder(MediaRecorder.AudioEncoder.AMR_NB);try {mRecorder.prepare();} catch (IOException e) {Log.e(LOG_TAG, "prepare() failed");}mRecorder.start();}private void stopRecording() {mRecorder.stop();mRecorder.release();mRecorder = null;}class RecordButton extends Button {boolean mStartRecording = true;OnClickListener clicker = new OnClickListener() {public void onClick(View v) {onRecord(mStartRecording);if (mStartRecording) {setText("Stop recording");} else {setText("Start recording");}mStartRecording = !mStartRecording;}};public RecordButton(Context ctx) {super(ctx);setText("Start recording");setOnClickListener(clicker);}}class PlayButton extends Button {boolean mStartPlaying = true;OnClickListener clicker = new OnClickListener() {public void onClick(View v) {onPlay(mStartPlaying);if (mStartPlaying) {setText("Stop playing");} else {setText("Start playing");}mStartPlaying = !mStartPlaying;}};public PlayButton(Context ctx) {super(ctx);setText("Start playing");setOnClickListener(clicker);}}public AudioRecordTest() {mFileName = Environment.getExternalStorageDirectory().getAbsolutePath();//在你本地SD卡根目录输出录音文件mFileName += "/audioRecordtestMusic.amr";}@Overridepublic void onCreate(Bundle icicle) {super.onCreate(icicle);//保持屏幕唤醒,否则在录音过程当中锁屏容易被回收getWindow().addFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON);LinearLayout ll = new LinearLayout(this);//录音按钮mRecordButton = new RecordButton(this);ll.addView(mRecordButton, new LinearLayout.LayoutParams(ViewGroup.LayoutParams.WRAP_CONTENT, ViewGroup.LayoutParams.WRAP_CONTENT, 0));//播放按钮mPlayButton = new PlayButton(this);ll.addView(mPlayButton, new LinearLayout.LayoutParams(ViewGroup.LayoutParams.WRAP_CONTENT, ViewGroup.LayoutParams.WRAP_CONTENT, 0));setContentView(ll);}@Overridepublic void onPause() {super.onPause();if (mRecorder != null) {mRecorder.release();mRecorder = null;}if (mPlayer != null) {mPlayer.release();mPlayer = null;}}}

使用结果

1.作者亲自测试,AMR格式的录音正常人说一句话一般在5KB~10KB之前,也就是说1MB你可以说200多句话相当不错

更多相关文章

  1. android获取版本信息、屏幕信息和设备编号
  2. android高版本Toast问题
  3. Android统一依赖多个不同版本的Support v7包
  4. android 读取根目录下的文件或文件夹
  5. Flutter——flutter版本升级到1.2.1后遇到的问题:...AndroidX inc
  6. Android系统版本号对应的代号以及API等级一览表
  7. android 版本更新6.0、7.0和8.0权限适配

随机推荐

  1. Android SDK Installed On Mac
  2. 从头构建android 本地C++语言可执行程序
  3. android 物理按键
  4. android,handler实现两个线程通信
  5. Android 开发技术周报 Issue#281
  6. Android - 常见错误的解决方法
  7. Android深入浅出系列课程---Lesson7 LLY1
  8. 那些年,在Fragment中犯的错
  9. Android 中 PopupWindow的用法 汇总 Andr
  10. 一个APK反编译利器Apktool(android汉化)