Android如何实现点击持续录音,松开结束录音并实现随着分贝的大小改变图片
发表于:2025-11-13 作者:千家信息网编辑
千家信息网最后更新 2025年11月13日,这篇文章给大家分享的是有关Android如何实现点击持续录音,松开结束录音并实现随着分贝的大小改变图片的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。显示录音大小的DIALO
千家信息网最后更新 2025年11月13日Android如何实现点击持续录音,松开结束录音并实现随着分贝的大小改变图片
这篇文章给大家分享的是有关Android如何实现点击持续录音,松开结束录音并实现随着分贝的大小改变图片的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。
显示录音大小的DIALOG实现
public class VioceDomio { private Context mContext; private AlertDialog dialog ; private AlertDialog.Builder adialogbuile; private ImageView vioce_show; public VioceDomio(Context mContext) { this.mContext=mContext; } public void showRecordingDialog() { adialogbuile = new AlertDialog.Builder(mContext, R.style.Theme_AudioDialog); LayoutInflater inflater = LayoutInflater.from(mContext); View view=inflater.inflate(R.layout.voice_chage,null); vioce_show=(ImageView) view.findViewById(R.id.vioce_show); adialogbuile.setView(view); dialog = adialogbuile.create(); dialog.show(); dialog. getWindow().setLayout(500, 450); } public void HideRecordingDialog() { if(dialog!=null && dialog.isShowing()) { dialog.dismiss(); dialog=null; } } public void ChangeRecordingDialog(double db) { //根据录音的分贝改变大小 if(db>=1 && db<=18) { vioce_show.setImageResource(R.drawable.voicesearch_feedback001); }else if(db>=19 && db<=37) { vioce_show.setImageResource(R.drawable.voicesearch_feedback002); }else if(db>=19 && db<=37) { vioce_show.setImageResource(R.drawable.voicesearch_feedback003); } else if(db>=38 && db<=56) { vioce_show.setImageResource(R.drawable.voicesearch_feedback004); }else if(db>=57 && db<=75) { vioce_show.setImageResource(R.drawable.voicesearch_feedback005); }else if(db>=76 && db<=94) { vioce_show.setImageResource(R.drawable.voicesearch_feedback006); }else if(db>=95 && db<=100) { vioce_show.setImageResource(R.drawable.voicesearch_feedback007); } }}Dialog加载的XML页面实现
主界面的试下
activoti.xml
MainActiovity.java实现
protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); requestWindowFeature(Window.FEATURE_NO_TITLE); setContentView(R.layout.activoti); send=(Button) findViewById(R.id.send); viocedomio=new VioceDomio(this); speak.setOnTouchListener(new View.OnTouchListener() { public boolean onTouch(View v, MotionEvent event) { // TODO Auto-generated method stub CountingThreadextends thend=new CountingThreadextends(); if(event.getAction()==MotionEvent.ACTION_DOWN) { //如果按钮处于按下状态 //录音 if(!Environment.getExternalStorageState().equals(android.os.Environment.MEDIA_MOUNTED)) { Toast.makeText(ChatActivity.this, "SD not ", Toast.LENGTH_SHORT).show(); return false; } String sound_path=time_path+"sound.amr"; try{ soundfile=new File(Environment.getExternalStorageDirectory().getCanonicalFile()+"/bishevoice/"+sound_path); Log.d("send_filepath", Environment.getExternalStorageDirectory().getCanonicalFile()+"/bishevoice/"+sound_path); mmedio=new MediaRecorder(); mmedio.setAudioSource(MediaRecorder.AudioSource.MIC); mmedio.setOutputFormat(MediaRecorder.OutputFormat.THREE_GPP); mmedio.setOutputFile(soundfile.getAbsolutePath()); mmedio.setAudioEncoder(MediaRecorder.AudioEncoder.AMR_NB); try{ //创建文件,准备录制 soundfile.createNewFile(); mmedio.prepare(); }catch(IllegalStateException e) { e.printStackTrace(); } //开始录制 thend.start(); mmedio.start(); speak.setText("松开停止录音"); viocedomio.showRecordingDialog(); //显示录音的大小 final Handler mHandler = new Handler() { @Override public void handleMessage(Message msg) { viocedomio.ChangeRecordingDialog(Double.parseDouble(msg.obj.toString())); } }; new Thread(new Runnable() { //启动线程根据改变录音显示大小 @Override public void run() { // TODO Auto-generated method stub while(mmedio!=null) { double ratio = (double)mmedio.getMaxAmplitude() ; double db = 0;// 分贝 if (ratio > 1) db = 20 * Math.log10(ratio); // Log.d(TAG,分贝值:+db); // mHandler.postDelayed(mUpdateMicStatusTimer, SPACE); Message msg=new Message(); msg.obj=db; mHandler.sendMessage(msg); } } }).start(); }catch(Exception e) { e.printStackTrace(); } } if(event.getAction()==MotionEvent.ACTION_UP) { //如果是松开 if(soundfile != null && soundfile.exists()) { //停止录音 try { mmedio.setOnErrorListener(null); mmedio.setOnInfoListener(null); mmedio.setPreviewDisplay(null); mmedio.stop(); thend.interrupt(); //timetask.cancel(); }catch(Exception e) { Log.i("Exception", Log.getStackTraceString(e)); } mmedio.release(); mmedio=null; speak.setText("按住请讲话!!!"); String content=""; if(content.isEmpty()) { viocedomio.HideRecordingDialog(); //隐藏录音标志 Msg msg=new Msg(content,Msg.TYPE_SENT,Msg.TYPE_SENT_VOICE,Integer.toString(time_int),file_path); msg.setChattype(0); msglist.add(msg); adapter.notifyDataSetChanged(); //当有新消息时,刷新listview中的显示 msgListView.setSelection(msglist.size()-1); //将listview定位到最后一行 } } } return true; } });
感谢各位的阅读!关于"Android如何实现点击持续录音,松开结束录音并实现随着分贝的大小改变图片"这篇文章就分享到这里了,希望以上内容可以对大家有一定的帮助,让大家可以学到更多知识,如果觉得文章不错,可以把它分享出去让更多的人看到吧!
大小
图片
内容
更多
篇文章
不错
实用
一行
按钮
文件
文章
标志
消息
状态
界面
看吧
知识
线程
页面
准备
数据库的安全要保护哪些东西
数据库安全各自的含义是什么
生产安全数据库录入
数据库的安全性及管理
数据库安全策略包含哪些
海淀数据库安全审计系统
建立农村房屋安全信息数据库
易用的数据库客户端支持安全管理
连接数据库失败ssl安全错误
数据库的锁怎样保障安全
最强大脑网络安全大赛
数据库中的多对多模型实例
设备安全 网络安全
开源轻量级数据库
矿大有网络安全专业吗
逍遥网络安全教育
方舟服务器航海王模组
二本院校嵌入式软件开发
国内的数据库厂商
青山湖科技城互联网公司
数据管理软件开发
新零售软件开发哪家好
北京能通天下网络技术有限公司
检索数据库是字段代表什么
计算机网络技术孙波
达梦数据库性能优化实践
服务器阿里
软件开发人员的组成
查看kdb数据库版本命令
息息相关的网络安全隐患
无忧互联网科技怎么样
winform传图片服务器
中国商务部数据库官网
2022年网络安全的发展趋势
伊川软件开发
睢县网络技术公司
萧敬腾视频软件开发
网络安全葛林娜
sql数据库中序列
南京常见软件开发技术参数