返回顶部
首页 > 资讯 > 精选 >在Android开发中利用MediaRecorder实现一个录音功能
  • 623
分享到

在Android开发中利用MediaRecorder实现一个录音功能

androidmediarecorderroi 2023-05-31 12:05:46 623人浏览 独家记忆
摘要

这篇文章给大家介绍在Android开发中利用MediaRecorder实现一个录音功能,内容非常详细,感兴趣的小伙伴们可以参考借鉴,希望对大家能有所帮助。代码如下:public class MediaRecorderActivity ext

这篇文章给大家介绍在Android开发中利用MediaRecorder实现一个录音功能,内容非常详细,感兴趣的小伙伴们可以参考借鉴,希望对大家能有所帮助。

代码如下:

public class MediaRecorderActivity extends BaseActivity { private Button start_tv; private ListView listView; //线程操作 private ExecutorService mExecutorService; //录音api private MediaRecorder mMediaRecorder; //录音开始时间与结束时间 private long startTime, endTime; //录音所保存的文件 private File mAudioFile; //文件列表数据 private List<FileBean> dataList; //录音文件数据列表适配器 private AudioAdapter mAudioAdapter; //录音文件保存位置 private String mFilePath = Environment.getExternalStorageDirectory().getAbsolutePath() + "/audio/"; //当前是否正在播放 private volatile boolean isPlaying; //播放音频文件API private MediaPlayer mediaPlayer; //使用Handler更新UI线程 private Handler mHandler = new Handler() {  @Override  public void handleMessage(Message msg) {   super.handleMessage(msg);   switch (msg.what) {    case Constant.RECORD_SUCCESS:     //录音成功,展示数据     if (null == mAudioAdapter) {      mAudioAdapter = new AudioAdapter(MediaRecorderActivity.this, dataList, R.layout.file_item_layout);     }     listView.setAdapter(mAudioAdapter);     break;    //录音失败    case Constant.RECORD_FaiL:     showToastMsg(getString(R.string.record_fail));     break;    //录音时间太短    case Constant.RECORD_TOO_SHORT:     showToastMsg(getString(R.string.time_too_short));     break;    case Constant.PLAY_COMPLETION:     showToastMsg(getString(R.string.play_over));     break;    case Constant.PLAY_ERROR:     showToastMsg(getString(R.string.play_error));     break;   }  } }; @Override protected void setWindowView() {  setContentView(R.layout.activity_record);  //录音及播放要使用单线程操作  mExecutorService = Executors.newSingleThreadExecutor();  dataList = new ArrayList<>(); } @Override protected void initViews() {  this.start_tv = (Button) findViewById(R.id.start_tv);  this.listView = (ListView) findViewById(R.id.listview); } @Override protected void initEvents() {  //类似微信等应用按住说话进行录音,所以用OnTouch事件  this.start_tv.setOnTouchListener(new View.OnTouchListener() {   @Override   public boolean onTouch(View view, MotionEvent motionEvent) {    switch (motionEvent.getAction()) {     //按下操作     case MotionEvent.ACTION_DOWN:      //安卓6.0以上录音相应权限处理      if (Build.VERSION.SDK_INT > 22) {       permissionFORM();      } else {       startRecord();      }      break;     //松开操作     case MotionEvent.ACTION_CANCEL:     case MotionEvent.ACTION_UP:      stopRecord();      break;    }    //对OnTouch事件做了处理,返回true    return true;   }  });  //点击播放对应的录音文件  this.listView.setOnItemClickListener(new AdapterView.OnItemClickListener() {   @Override   public void onItemClick(AdapterView<&#63;> adapterView, View view, int i, long l) {    //使用MediaPlayer播放声音文件    startPlay(dataList.get(i).getFile());   }  }); }  private void startRecord() {  start_tv.setText(R.string.stop_by_up);  start_tv.setBackgroundResource(R.drawable.bg_gray_round);  //异步任务执行录音操作  mExecutorService.submit(new Runnable() {   @Override   public void run() {    //播放前释放资源    releaseRecorder();    //执行录音操作    recordOperation();   }  }); }  private void recordFail() {  mAudioFile = null;  mHandler.sendEmptyMessage(Constant.RECORD_FAIL); }  private void recordOperation() {  //创建MediaRecorder对象  mMediaRecorder = new MediaRecorder();  //创建录音文件,.m4a为MPEG-4音频标准的文件的扩展名  mAudioFile = new File(mFilePath + System.currentTimeMillis() + ".m4a");  //创建父文件夹  mAudioFile.getParentFile().mkdirs();  try {   //创建文件   mAudioFile.createNewFile();   //配置mMediaRecorder相应参数   //从麦克风采集声音数据   mMediaRecorder.setAudiOSource(MediaRecorder.AudioSource.MIC);   //设置保存文件格式为MP4   mMediaRecorder.setOutputFormat(MediaRecorder.OutputFormat.MPEG_4);   //设置采样频率,44100是所有安卓设备都支持的频率,频率越高,音质越好,当然文件越大   mMediaRecorder.setAudioSamplingRate(44100);   //设置声音数据编码格式,音频通用格式是AAC   mMediaRecorder.setAudioEncoder(MediaRecorder.AudioEncoder.AAC);   //设置编码频率   mMediaRecorder.setAudioEncodingBitRate(96000);   //设置录音保存的文件   mMediaRecorder.setOutputFile(mAudioFile.getAbsolutePath());   //开始录音   mMediaRecorder.prepare();   mMediaRecorder.start();   //记录开始录音时间   startTime = System.currentTimeMillis();  } catch (Exception e) {   e.printStackTrace();   recordFail();  } }  private void stopRecord() {  start_tv.setText(R.string.speak_by_press);  start_tv.setBackgroundResource(R.drawable.bg_white_round);  //停止录音  mMediaRecorder.stop();  //记录停止时间  endTime = System.currentTimeMillis();  //录音时间处理,比如只有大于2秒的录音才算成功  int time = (int) ((endTime - startTime) / 1000);  if (time >= 3) {   //录音成功,添加数据   FileBean bean = new FileBean();   bean.setFile(mAudioFile);   bean.setFileLength(time);   dataList.add(bean);   //录音成功,发Message   mHandler.sendEmptyMessage(Constant.RECORD_SUCCESS);  } else {   mAudioFile = null;   mHandler.sendEmptyMessage(Constant.RECORD_TOO_SHORT);  }  //录音完成释放资源  releaseRecorder(); }  private void releaseRecorder() {  if (null != mMediaRecorder) {   mMediaRecorder.release();   mMediaRecorder = null;  } } @Override public void onClick(View view) { } @Override protected void onDestroy() {  super.onDestroy();  //页面销毁,线程要关闭  mExecutorService.shutdownNow(); }   private void permissionForM() {  if (ContextCompat.checkSelfPermission(this,    Manifest.permission.RECORD_AUDIO) != PackageManager.PERMISSION_GRANTED || ContextCompat.checkSelfPermission(this,    Manifest.permission.WRITE_EXTERNAL_STORAGE) != PackageManager.PERMISSION_GRANTED) {   ActivityCompat.requestPermissions(this,     new String[]{Manifest.permission.RECORD_AUDIO, Manifest.permission.WRITE_EXTERNAL_STORAGE},     Constant.PERMISSIONS_REQUEST_FOR_AUDIO);  } else {   startRecord();  } } @Override public void onRequestPermissionsResult(int requestCode,           @NonNull String[] permissions, @NonNull int[] grantResults) {  if (requestCode == Constant.PERMISSIONS_REQUEST_FOR_AUDIO) {   if (grantResults[0] == PackageManager.PERMISSION_GRANTED) {    startRecord();   }   return;  }  super.onRequestPermissionsResult(requestCode, permissions, grantResults); }  private void playAudio(final File mFile) {  if (null != mFile && !isPlaying) {   isPlaying = true;   mExecutorService.submit(new Runnable() {    @Override    public void run() {     startPlay(mFile);    }   });  } }  private void startPlay(File mFile) {  try {   //初始化播放器   mediaPlayer = new MediaPlayer();   //设置播放音频数据文件   mediaPlayer.setDataSource(mFile.getAbsolutePath());   //设置播放监听事件   mediaPlayer.setOnCompletionListener(new MediaPlayer.OnCompletionListener() {    @Override    public void onCompletion(MediaPlayer mediaPlayer) {     //播放完成     playEndOrFail(true);    }   });   //播放发生错误监听事件   mediaPlayer.setOnErrorListener(new MediaPlayer.OnErrorListener() {    @Override    public boolean onError(MediaPlayer mediaPlayer, int i, int i1) {     playEndOrFail(false);     return true;    }   });   //播放器音量配置   mediaPlayer.setVolume(1, 1);   //是否循环播放   mediaPlayer.setLooping(false);   //准备及播放   mediaPlayer.prepare();   mediaPlayer.start();  } catch (IOException e) {   e.printStackTrace();   //播放失败正理   playEndOrFail(false);  } }  private void playEndOrFail(boolean isEnd) {  isPlaying = false;  if (isEnd) {   mHandler.sendEmptyMessage(Constant.PLAY_COMPLETION);  } else {   mHandler.sendEmptyMessage(Constant.PLAY_ERROR);  }  if (null != mediaPlayer) {   mediaPlayer.setOnCompletionListener(null);   mediaPlayer.setOnErrorListener(null);   mediaPlayer.stop();   mediaPlayer.reset();   mediaPlayer.release();   mediaPlayer = null;  } }}

--结束END--

本文标题: 在Android开发中利用MediaRecorder实现一个录音功能

本文链接: https://lsjlt.com/news/225673.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

猜你喜欢
  • 在Android开发中利用MediaRecorder实现一个录音功能
    这篇文章给大家介绍在Android开发中利用MediaRecorder实现一个录音功能,内容非常详细,感兴趣的小伙伴们可以参考借鉴,希望对大家能有所帮助。代码如下:public class MediaRecorderActivity ext...
    99+
    2023-05-31
    android mediarecorder roi
  • Android利用MediaRecorder实现录音功能
    本文实例为大家分享了Android利用MediaRecorder实现录音功能 的具体代码,供大家参考,具体内容如下 android用手机录音保存到sd卡中; 布局文件: &...
    99+
    2024-04-02
  • 如何在Android中利用MediaRecorder实现一个录像功能
    今天就跟大家聊聊有关如何在Android中利用MediaRecorder实现一个录像功能,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家根据这篇文章可以有所收获。在AndroidManifest.xml加入以下...
    99+
    2023-05-31
    android mediarecorder roi
  • 在Android中使用MediaRecorder实现录音功能
    在Android中使用MediaRecorder实现录音功能?针对这个问题,这篇文章详细介绍了相对应的分析和解答,希望可以帮助更多想解决这个问题的小伙伴找到更简单易行的方法。MediaRecorder已经集成了录音、编码、压缩等,支持少量的...
    99+
    2023-05-31
    android mediarecorder roi
  • 通过在android项目中使用MediaRecorder实现一个录音功能
    这篇文章将为大家详细讲解有关通过在android项目中使用MediaRecorder实现一个录音功能,文章内容质量较高,因此小编分享给大家做个参考,希望大家阅读完这篇文章后对相关知识有一定的了解。MainActivitypackage co...
    99+
    2023-05-31
    mediarecorder android roi
  • android MediaRecorder实现录屏时带录音功能
    下面说说android的事把 最近是不是也会遇到需求中需要用到录屏录音的功能,最近也是遇到的 现在整理完记录一下 首先呢,录音录屏需要权限 先贴一个动态权限类 public ...
    99+
    2022-06-07
    录屏 mediarecorder Android
  • Android中使用原生MediaRecorder APi实现录音功能
    一、MediaRecorder简介 MediaRecorder是Android中的一个API,可以用来实现录音功能。它继承自android.media.MediaRecorder类,可以实现音频和视频的录制。 二、MediaRecorder...
    99+
    2023-09-30
    android
  • Android App调用MediaRecorder实现录音功能的实例
    MediaRecorder Android的MediaRecorder包含了Audio和video的记录功能,在Android的界面上,Music和Video两个应用程序都是调...
    99+
    2022-06-06
    mediarecorder app Android
  • 在Android开发中利用ViewPager实现一个轮播功能
    本篇文章给大家分享的是有关在Android开发中利用ViewPager实现一个轮播功能,小编觉得挺实用的,因此分享给大家学习,希望大家阅读完这篇文章后可以有所收获,话不多说,跟着小编一起来看看吧。ViewPager是一个常用的Android...
    99+
    2023-05-31
    viewpager android age
  • 在Android应用中实现一个录音播放功能
    这期内容当中小编将会给大家带来有关在Android应用中实现一个录音播放功能,文章内容丰富且以专业的角度为大家分析和叙述,阅读完这篇文章希望大家可以有所收获。播放音频文件public class PlayManager { private ...
    99+
    2023-05-31
    android roi
  • 在Java中使用swing实现一个录音功能
    在Java中使用swing实现一个录音功能?相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章希望你能解决这个问题。添加监听事件:import java.awt.*;import java.awt.eve...
    99+
    2023-05-31
    java swing ava
  • Android开发中如何实现一个音乐播放器功能
    Android开发中如何实现一个音乐播放器功能?针对这个问题,这篇文章详细介绍了相对应的分析和解答,希望可以帮助更多想解决这个问题的小伙伴找到更简单易行的方法。需求1:将内存卡中的MP3音乐读取出来并显示到列表当中从数据库中查询所有音乐数据...
    99+
    2023-05-31
    android 音乐播放器 roi
  • Android开发中怎么实现一个音乐播放器功能
    Android开发中怎么实现一个音乐播放器功能?针对这个问题,这篇文章详细介绍了相对应的分析和解答,希望可以帮助更多想解决这个问题的小伙伴找到更简单易行的方法。具体实现首先是布局文件中添加了如下代码,这些代码就是实现控制台的,给整体设置了一...
    99+
    2023-05-31
    android roi
  • Android应用中怎么实现一个通话录音功能
    这期内容当中小编将会给大家带来有关Android应用中怎么实现一个通话录音功能,文章内容丰富且以专业的角度为大家分析和叙述,阅读完这篇文章希望大家可以有所收获。服务代码:package com.eboy.phoneListener;impo...
    99+
    2023-05-31
    android roi
  • 怎么在Android应用中实现一个语音消息发送功能
    本篇文章为大家展示了怎么在Android应用中实现一个语音消息发送功能,内容简明扼要并且容易理解,绝对能使你眼前一亮,通过这篇文章的详细介绍希望你能有所收获。直接上代码://语音操作对象private MediaPlayer&nb...
    99+
    2023-05-30
    android roi
  • Android中怎么利用AudioRecord实现暂停录音功能
    Android中怎么利用AudioRecord实现暂停录音功能,相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章希望你能解决这个问题。项目设计的思路:由于自带的AudioRecord没有pauseRec...
    99+
    2023-05-31
    android audiorecord
  • Android开发中利用ListView怎么实现一个分页加载功能
    这期内容当中小编将会给大家带来有关Android开发中利用ListView怎么实现一个分页加载功能,文章内容丰富且以专业的角度为大家分析和叙述,阅读完这篇文章希望大家可以有所收获。具体如下:package eoe.listview;impo...
    99+
    2023-05-31
    android 分页加载 listview
  • 怎么在html5项目中实现一个录音功能
    这篇文章给大家介绍怎么在html5项目中实现一个录音功能,内容非常详细,感兴趣的小伙伴们可以参考借鉴,希望对大家能有所帮助。步骤1由于新的api是通过navigator.mediaDevices.getUserMedia,且返回一个prom...
    99+
    2023-06-09
  • 怎么在小程序中实现一个录音功能
    本篇文章为大家展示了怎么在小程序中实现一个录音功能,内容简明扼要并且容易理解,绝对能使你眼前一亮,通过这篇文章的详细介绍希望你能有所收获。首先获取录音管理器模块:const recorderManager = ...
    99+
    2023-06-07
  • 怎么在Android中利用ListView实一个汉字转成拼音功能
    本篇文章为大家展示了怎么在Android中利用ListView实一个汉字转成拼音功能,内容简明扼要并且容易理解,绝对能使你眼前一亮,通过这篇文章的详细介绍希望你能有所收获。项目结构我按照项目中类的顺序来一一介绍其功能SortModel 一个...
    99+
    2023-05-31
    android listview roi
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作