实现一个录音弹窗 按住说话。松开停止。。点击完成保存

Dialog代码

package com.runjiang.cityplatform.ui.dialog;import android.annotation.SuppressLint;
import android.app.Dialog;
import android.content.Context;
import android.media.MediaRecorder;
import android.os.Bundle;
import android.view.MotionEvent;
import android.view.View;
import android.widget.ImageView;
import android.widget.TextView;
import androidx.annotation.NonNull;
import com.runjiang.cityplatform.R;
import java.io.File;public class SoundRecordDialog extends Dialog {private Context mContext;private MediaRecorder mr;private String cacheFilePath;private OnCompleteClickListen mOnCompleteClickListen;public SoundRecordDialog(@NonNull Context context,OnCompleteClickListen listen) {super(context);this.mContext=context;this.mOnCompleteClickListen=listen;}@SuppressLint({"MissingInflatedId", "LocalSuppress"})@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.dialog_sound_record);ImageView iv_sound_record= findViewById(R.id.iv_sound_record);TextView tv_status= findViewById(R.id.tv_status);TextView tv_finish= findViewById(R.id.tv_finish);// 手势操作处理iv_sound_record.setOnTouchListener(new View.OnTouchListener() {@SuppressLint("ClickableViewAccessibility")@Overridepublic boolean onTouch(View v, MotionEvent event) {if (event.getAction() == MotionEvent.ACTION_DOWN)iv_sound_record.setBackgroundResource(R.mipmap.icon_sound_record_blue);tv_status.setText("录音中...");startRecord();if (event.getAction() == MotionEvent.ACTION_UP) {iv_sound_record.setBackgroundResource(R.mipmap.icon_sound_record_green);tv_status.setText("按住说话");stopRecord();}return true;}});tv_finish.setOnClickListener(v -> {if (null!=mOnCompleteClickListen){mOnCompleteClickListen.onComplete(cacheFilePath);}});}boolean isRecording = false;public void startRecord(){if(mr==null){mr = new MediaRecorder();File  savePath= null;try {File file = new File(mContext.getExternalCacheDir(),"sounds");if (!file.exists()){file.mkdir();}savePath = new File(cacheFilePath=file.getAbsolutePath()+File.separator+System.currentTimeMillis()+".mp4");} catch (Exception e) {e.printStackTrace();}mr.setAudioSource(MediaRecorder.AudioSource.MIC);      // 设置录音的输入源mr.setOutputFile(savePath.getAbsolutePath());          // 设置输出文件名mr.setOutputFormat(MediaRecorder.OutputFormat.MPEG_4); // 设置输出格式mr.setAudioEncoder(MediaRecorder.AudioEncoder.AAC); // 设置编码格式-AAC电脑能直接播放try{mr.prepare();mr.start();isRecording = true;
//                Log.e("录音文件名",savePath.getAbsolutePath());} catch(Exception e){e.printStackTrace();}}}public void stopRecord(){if(mr!= null){if (isRecording)mr.stop();mr.reset();mr.release();mr = null;}}private OnCompleteClickListen listener;public void setOnCompleteClickListen(OnCompleteClickListen onCompleteClickListen){listener=onCompleteClickListen;}/*** 设置确定取消按钮的回调*/public interface OnCompleteClickListen {void onComplete(String path);}@Overridepublic void onDetachedFromWindow() {super.onDetachedFromWindow();stopRecord();}
}

2.调用及销毁

    SoundRecordDialog mSrd;private void showSoundRecordDialog(){if (null!=mSrd && mSrd.isShowing()){return;}mSrd=new SoundRecordDialog(this, new SoundRecordDialog.OnCompleteClickListen() {@Overridepublic void onComplete(String path) {mSrd.dismiss();if (null==path || TextUtils.isEmpty(path)){return;}
//                Log.e("点击完成",path);file=new File(path);uploadFileToServer(AUDIO);}});mSrd.show();}@Overrideprotected void onDestroy() {if (null!=mSrd){mSrd.dismiss();mSrd=null;}}

3.布局文件

<?xml version="1.0" encoding="utf-8"?>
<androidx.appcompat.widget.LinearLayoutCompatxmlns:android="http://schemas.android.com/apk/res/android"android:layout_width="250dp"android:layout_height="250dp"android:gravity="center"android:background="@drawable/shape_rec_c15all"android:orientation="vertical"><ImageViewandroid:id="@+id/iv_sound_record"android:layout_width="100dp"android:layout_height="100dp"android:background="@mipmap/icon_sound_record_green"/><TextViewandroid:id="@+id/tv_status"android:layout_marginTop="10dp"android:layout_width="wrap_content"android:layout_height="wrap_content"android:text="按住说话"/><TextViewandroid:id="@+id/tv_finish"android:layout_marginTop="30dp"android:layout_width="180dp"android:layout_height="45dp"android:background="@color/main_color"android:gravity="center"android:textColor="@color/white"android:text="完成"/></androidx.appcompat.widget.LinearLayoutCompat>

4.ui效果

MediaRecorder实现录音相关推荐

  1. Android 使用MediaRecorder实现录音

    Android开发中,实现录音的方式主要有两种:MediaRecorder 和 AudioRecord. 两者区别在于MediaRecorder录制的文件是经过压缩的,需要设置编码器,录制的文件系统可 ...

  2. Android之录音--AudioRecord、MediaRecorder

    Android提供了两个API用于实现录音功能:android.media.AudioRecord.android.media.MediaRecorder. 网上有很多谈论这两个类的资料.现在大致总结 ...

  3. 【Android】【录音】Android录音--AudioRecord、MediaRecorder

    Android提供了两个API用于实现录音功能:android.media.AudioRecord.android.media.MediaRecorder. 网上有很多谈论这两个类的资料.现在大致总结 ...

  4. android java 录音放大_Android实现录音功能实现实例(MediaRecorder)

    本文介绍了Android实现录音的实例代码(MediaRecorder),分享给大家,具体如下: Android提供了两个API用于录音的实现:MediaRecorder 和 AudioRecord, ...

  5. android录音倒计时,android MediaRecorder实现录音功能 显示时间 计时

    初始化: if (recorder==null){ recorder=new MediaRecorder();//初始化录音对象 recorder.setAudioSource(MediaRecord ...

  6. Android录音器实验报告,Android实现录音(MediaRecorder)

    Android提供了两个API用于录音的实现:MediaRecorder 和 AudioRecord,各有优劣. 1.MediaRecorder 已经集成了录音.编码.压缩等,支持少量的录音音频格式, ...

  7. Android 录音实现(MediaRecorder)

    最近在项目中实现录音功能,并在逻辑中还有对录音文件的特殊要求,前前后后看了很多资料,学习了很多,今天在这里分享记录一下,以便后期回看. Android提供了两个API用于录音的实现:MediaReco ...

  8. android录音程序,使用MediaRecorder编写Android 录音程序

    类型:音频处理大小:2.0M语言:中文 评分:3.3 标签: 立即下载 今天工作上需要做一个一边录音一边播放的功能,大致原因是有一个外部设备输入音频到我们机器,然后我们机器需要马上把音频播放出来.所以 ...

  9. Android 录音(MediaRecorder)与播放(MediaPlayer)

    通过MediaRecorder和MediaPlayer实现声音的录制和播放,代码比较简单,直接贴代码.xml文件里面只有四个按钮就不贴了. UI 代码: VoiceActivity.class pac ...

最新文章

  1. 手机远程ssh登录Linux,Linux SSH(远程登录)到Milestone手机
  2. golang struct 转map 及 map[string]*Struct 初始化和遍历
  3. 方法 注释_在IDEA中配置类和方法的文档注释
  4. 仿函数适配器(mem_fun/mem_fun_ref)
  5. 【讨论】测试工程师能否作为一份终生职业?30岁+怎么办?
  6. 滑动窗口:字符串的变位词(排列)leetcode567,leetcode438
  7. 复杂业务下向Mysql导入30万条数据代码优化的踩坑记录
  8. 在cell中自定义分割线的小技巧
  9. Android腾讯微博开放平台(六)发布一条图文微博
  10. SI4463 空中唤醒教程
  11. 一步到位:手把手教你R语言竞争风险模型建模-列线图-校准曲线-K折验证-外部验证- 决策曲线
  12. 清除网页缓存的快捷键
  13. 联想 sl 400 无线网卡驱动
  14. wps文档设置页眉左右(奇偶页)不同内容
  15. ARFoundation系列讲解 - 80 AR内容制作一
  16. 联发科mt6779(Helio P90),mt6775(Helio P70),MT6771(Helio P60),Helio P35,MT6762(Helio P22)处理器参数介绍
  17. SEO优化之浅谈蜘蛛日志
  18. 传说对决服务器无响应怎么办,传说对决一直进不去怎么办
  19. 软件测试技术 实验一:黑盒测试1
  20. EasyConnect一登录就自动注销问题

热门文章

  1. 如何用matlab读取hdf文件,matlab读取hdf文件
  2. 计算机专业的毕设应该怎么做?
  3. java c3po_17、C3PO纯java使用
  4. 为什么不能随便叫别人领导
  5. MUSBMHDRC USB 2.0 MULTI-POINT DUAL-ROLE CONTROLLER编程指南解读2
  6. python递归函数例题_Python练习题 022:用递归函数反转字符串
  7. 三极管各参数如何选取问题(共射极放大电路)
  8. 函数、程序-python综合练习 -by小雨
  9. 新产品如何有效的利用展示架推广出去?
  10. 影楼行业的除了ps修图外还有Lr。