简单是终极的复杂。                       ——达·芬奇

权限:

RECORD_AUDIO

WRITE_EXTERNAL_STORAGE

步骤:

一.对控件(TextView)设置点击事件:setOnTouchListener。

textview.setOnTouchListener(new View.OnTouchListener() {@Overridepublic boolean onTouch(View view, MotionEvent motionEvent) {switch (motionEvent.getAction()){case MotionEvent.ACTION_DOWN:         //按下startRecord();                    //开始录音函数break;case MotionEvent.ACTION_UP:           //抬起                       case MotionEvent.ACTION_CANCEL:       //滑动 抬起stopRecord();                     //停止录音函数break;default:break;}return true;}});}

二.开始录音。

1.改变UI。

2.开启后台录音。(主函数初始化 ExecutorService executorService= Executors.newSingleThreadExecutor()//开启单线程)

executorService.submit(new Runnable() {@Overridepublic void run() {releaseRecorder();         //先释放之前的录音if(!dostart()){            //录音函数recordFail();          //失败提醒}}});

3.录音。

private boolean dostart() {try {//初始化mediaRecordermmediarecorder=new MediaRecorder();//创建录音文件maudiofile=new File(Environment.getExternalStorageDirectory().getAbsolutePath()+"/iMoocDemo/"+System.currentTimeMillis()+".m4a");maudiofile.getParentFile().mkdirs();maudiofile.createNewFile();//麦克风采集mmediarecorder.setAudioSource(MediaRecorder.AudioSource.MIC);//保存文件为MP4格式mmediarecorder.setOutputFormat(MediaRecorder.OutputFormat.MPEG_4);//安卓系统都支持的采样频率mmediarecorder.setAudioSamplingRate(44100);//通用的AAC编码格式mmediarecorder.setAudioEncoder(MediaRecorder.AudioEncoder.AAC);//音质比较好的频率mmediarecorder.setAudioEncodingBitRate(96000);//录音文件的位置mmediarecorder.setOutputFile(maudiofile.getAbsolutePath());//开始录音mmediarecorder.prepare();mmediarecorder.start();//统计时长mstartrecordtime=System.currentTimeMillis();} catch (IOException | RuntimeException e) {e.printStackTrace();return false;}return true;}
   三.停止录音。
     1.改变UI(原始UI)。
   2.开启后台停止录音。
executorService.submit(new Runnable() {@Overridepublic void run() {if(!doStop()){           //停止录音函数recordFail();       //停止失败提醒}}});releaseRecorder();         //释放MediaRecorder
  3.停止录音。
private boolean doStop() {try {mmediarecorder.stop();                          //停止mstoprecordtime=System.currentTimeMillis();                    //记录停止时间final int second=(int)((mstoprecordtime-mstartrecordtime)/1000);       //停止时间-开始时间=录音所用时间if(second>3){                             //只要录音时长超过3秒的mmainthreadhander.post(new Runnable(){@Overridepublic void run() {mTvLog.setText(mTvLog.getText()+"\n录音成功"+second+"秒");    //显示录音成功}});}}catch (RuntimeException e){e.printStackTrace();return false;}return true;}
   四.失败提醒函数。(在主线程初始化Android.os.Handler hander=new android.os.Handler(Looper.getMainLooper());//os库下的Handler,
               Looper.getMainLooper为绑定主线程。不懂的,请访问Android中Handler的使用)
private void recordFail() {maudiofile=null;                    //录音文件设为空mmainthreadhander.post(new Runnable(){         //用Handler的post返回主线程进行Toast提醒@Overridepublic void run() {Toast.makeText(FileActivity.this, "录音失败", Toast.LENGTH_SHORT).show();}});}
 五.MediaRecorder释放函数。
private void releaseRecorder() {if(mmediarecorder!=null){      //如果不为空mmediarecorder.release();        //释放mmediarecorder=null;}}
    六.ExecutorService释放。
protected void onDestroy() {super.onDestroy();executorService.shutdownNow();            //立即释放releaseRecorder();                //MediaRecorder释放}

学习总结:即时通讯项目里面的语音处理-文件模式录音相关推荐

  1. IM即时通讯项目讲解(一) 实现类似qq微信表情面板无缝切换

    IM即时通讯项目讲解(一)--实现类似qq微信表情面板无缝切换 标签(空格分隔): 开源项目 ###该系列技术课程来源慕课IM实战 带后台的IM即时通讯App 全程MVP手把手打造 #####通过该课 ...

  2. Android-IM从零开始开发一个即时通讯项目

    Android-IM从零开始开发一个即时通讯项目 https://www.jianshu.com/p/dca480006691 关于聊天室项目 聊天室项目,也被称为即时通讯(IM). 其原理是服务器是 ...

  3. IM即时通讯项目讲解(一)--实现类似qq微信表情面板无缝切换

    该系列技术课程来源慕课IM实战 带后台的IM即时通讯App 全程MVP手把手打造 通过该课程可以学习到以下知识点 1.了解和开发后台项目(这个是需要长期积累的,有了这个可以说入门没问题) 2.学习到I ...

  4. 即时通讯项目 java版本qq (含服务器和客户端)源码_即时通讯安卓-QQ互联网和即时通讯云,如何实现即时通讯,这是Android还是Java...

    Android是系统平台. 应用程序所做的是应用程序的开发和完成 也就是说,通信是网络通信,但在手机环境中,网络的情况更复杂,所以我们必须做好结构 安卓即时通讯. 怎么做?安卓版TT即时通讯排行. A ...

  5. Maven学习总结(十一)——Maven项目对象模型pom.xml文件详解

    2019独角兽企业重金招聘Python工程师标准>>> <project xmlns="http://maven.apache.org/POM/4.0.0" ...

  6. 腾讯---即时通讯im--在聊天消息打开文件的解决方案

    即时通讯--腾讯im聊天消息中打开文件的解决办法 前言 一.如何解决打开文件? 二.使用步骤 1.引入腾讯im 2.腾讯im--文件处理类 3.腾讯im--文件处理方式 方法一:新建activity+ ...

  7. 把TeamTalk(即时通讯项目)中的线程池连接池拆出来单独测试。

    研究过Teamtalk的伙伴会发现它的线程池和连接池与很多文件有关联, 这篇文章主要写,把它的线程池连接池拆出来需要用到哪些文件. 其实我本来只想测试它的连接池的,但发现连接池里套的有线程池,于是就一 ...

  8. GatewayWorker+laravel5.5+layim即时通讯项目demo

    其中一些思路是看一位老铁的老铁demo,感谢这位老铁! https://github.com/shmilylbelva/webim,这位老铁用的是环信,我这里是用GatewayWorker+larav ...

  9. 消息推送和即时通讯项目简单实现

    使用Netty实现的服务端消息推送,Android端消息接收功能 各子项目功能说明如下: 1.IMClient:Android客户端工程 2.IMServer:服务端Web工程,负责监控连接和推送消息 ...

  10. websocket+php+layIm实现 单聊、群聊功能 即时通讯【可发送图片文件】

    实际效果: window下必须打开dos挂起服务层. linux可以直接 start -d 直接启动进程. --------------------------------------------分割 ...

最新文章

  1. Web前沿—HTML5 Form Data 对象的使用
  2. 无线传输系统功率LCC功率补偿系统设计
  3. Python(3) 进制转换
  4. Object defineProperty
  5. 自学前端开发,前端进阶阶段需要学习哪些知识?
  6. [学习笔记] JavaScript 检测数组
  7. Excel用ListBox多选下拉带选择框
  8. Excepted in :flat namespace
  9. 国内十家微交易平台,正规微交易平台排行榜
  10. matlab 中阿拉伯字母,常用阿拉伯字母念法
  11. rono在oracle的作用_细节见真章,OPPO Reno多项品质测试,这才是最真实表现
  12. eMMC SI 总结
  13. 【虹科案例】智能工控屏eX707在水下遥控机器人中的应用
  14. Qt编写数据可视化大屏界面电子看板1-布局方案
  15. ArcGIS的ArcToolbox执行任务时没反应或图层上有小锁的解决方法
  16. 聚合支付:全新的第四方支付平台
  17. 华为云ECS - 学习/实践
  18. C# IEnumerator和IEnumerable的区别
  19. 基于Javaweb的小项目(类似于qqzone) 5 ——登录功能实现
  20. python:PTA try-except-else异常

热门文章

  1. 2020我国夏季洪涝主要受灾区卫星影像记录
  2. win10主题更换_WIN10好用的小软件
  3. linux环境刷amd显卡bios,amd显卡刷bios方法
  4. c++质数判定及输出质数表
  5. 4. PKI - 数字签名、CA、数字证书
  6. 纳多德通过ISO 9001质量、ISO 14001环境、ISO 45001职业健康安全国际管理体系认证
  7. IBM server guide 下载地址及列表
  8. 设置 无线网 连接到服务器未响应,设置无线路由器显示服务器未响应
  9. 适用于Windows的Xcode:在PC上安装Xcode的5种方法
  10. python爬虫代码运行_怎么运行python爬虫程序