Android如何实现点击持续录音,松开结束录音并实现随着分贝的大小改变图片
发表于:2025-01-21 作者:千家信息网编辑
千家信息网最后更新 2025年01月21日,这篇文章给大家分享的是有关Android如何实现点击持续录音,松开结束录音并实现随着分贝的大小改变图片的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。显示录音大小的DIALO
千家信息网最后更新 2025年01月21日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安全错误
数据库的锁怎样保障安全
软件测试和软件开发哪个简单
网络安全主要的技术
修改数据库密码不重启
网站小程序和数据库如何连接
临床试验数据库光盘封面模板
数据库root密码可以修改吗
茂名网络安全教育平台
数据库可以分成两部分
网络安全监察毕业生就业
上海权盈网络技术有限公司
做网络安全的有哪些
网络技术和多媒体区别
软件开发三性
黄岛区神庙子网络技术服务部
win7搭建svn服务器
珠海网络安全教育平台登录
网络安全启动仪式简报
2008数据库ldf太大
sql 查询数据库名称
服务器安装前端教程
丹东市国家网络安全宣传周
阿里云服务器esc
对数据库进行维护
诺亚之心最新服务器
国际服怎么开启服务器模式
sql数据库常用函数表
机场网络安全员是干什么的
改变网络安全类型
网络安全考研院校有哪些
一码通为何服务器总是崩溃