依黛兰,宅急送网点,甘智和
步骤:
配置权限:
<manifest xmlns:android="http://schemas.android.com/apk/res/android" package="com.work.mediaplay"> <uses-permission android:name="android.permission.read_external_storage"></uses-permission> <uses-permission android:name="android.permission.write_external_storage"></uses-permission> <uses-permission android:name="android.permission.record_audio"></uses-permission>
代码步骤:
public class mainactivity extends appcompatactivity implements view.onclicklistener{ private button btn_start, btn_stop; private listview lv_content; private file sdcardfile = null; private string[] files; private mediarecorder recorder=null; @override protected void oncreate(bundle savedinstancestate) { super.oncreate(savedinstancestate); setcontentview(r.layout.activity_main); initview(); getsdcardfile(); getfilelist(); } /** * ① 实例化控件 */ private void initview() { btn_start = (button) findviewbyid(r.id.btn_stat); btn_stop = (button) findviewbyid(r.id.btn_stop); lv_content = (listview) findviewbyid(r.id.lv_content); //⑤给按钮添加监听事件 btn_start.setonclicklistener(this); btn_stop.setonclicklistener(this); //设置起始状态开始按钮可用,停止按钮不可用 btn_start.setenabled(true); btn_stop.setenabled(false); } /** * ②获取内存卡中文件的方法 */ private void getsdcardfile() { if (environment.getexternalstoragestate().equals(environment.media_mounted)) {//内存卡存在 sdcardfile=environment.getexternalstoragedirectory();//获取目录文件 }else { toast.maketext(this,"未找到内存卡",toast.length_short).show(); } } /** * ③获取文件列表(listview中的数据源) * 返回指定文件类型的文件名的集合作为数据源 */ private void getfilelist(){ if(sdcardfile!=null){ files=sdcardfile.list(new myfilter()); lv_content.setadapter(new arrayadapter<string>(this,android.r.layout.simple_list_item_1,files)); //⑥给listview中的元素添加点击播放事件 lv_content.setonitemclicklistener(new adapterview.onitemclicklistener() { @override public void onitemclick(adapterview<?> parent, view view, int position, long id) { //⑩定义播放音频的方法 play(files[position]); } }); } } @override public void onclick(view v) { switch (v.getid()){ case r.id.btn_stat: //⑧申请录制音频的动态权限 if(contextcompat.checkselfpermission(this, android.manifest.permission.record_audio) != packagemanager.permission_granted){ activitycompat.requestpermissions(this,new string[]{ android.manifest.permission.record_audio},1); }else { startrecord(); } break; case r.id.btn_stop: stoprcecord(); break; } } /** * ④定义一个文件过滤器myfilter的内部类,实现filenamefilter接口 * 重写里边accept方法 */ class myfilter implements filenamefilter{ @override public boolean accept(file pathname,string filename) { return filename.endswith(".amr"); } } /** * ⑦给两个按钮定义开始和暂停的方法 * */ private void startrecord(){ if(recorder==null){ recorder=new mediarecorder(); } recorder.setaudiosource(mediarecorder.audiosource.mic);//设置音频源为手机麦克风 recorder.setoutputformat(mediarecorder.outputformat.three_gpp);//设置输出格式3gp recorder.setaudioencoder(mediarecorder.audioencoder.amr_nb);//设置音频编码为amr格式 //获取内存卡的根目录,创建临时文件 try { file file=file.createtempfile("录音_",".amr",sdcardfile); recorder.setoutputfile(file.getabsolutepath());//设置文件输出路径 //准备和启动录制音频 recorder.prepare(); recorder.start(); } catch (ioexception e) { e.printstacktrace(); } //启动后交换两个按钮的可用状态 btn_start.setenabled(false); btn_stop.setenabled(true); } private void stoprcecord(){ if(recorder!=null){ recorder.stop(); recorder.release(); recorder=null; } btn_start.setenabled(true); btn_stop.setenabled(false); //刷新列表数据 getfilelist(); } /** * ⑨重写onrequestpermissionsresult方法 * 获取动态权限请求的结果,再开启录制音频 */ @override public void onrequestpermissionsresult(int requestcode, @nonnull string[] permissions, @nonnull int[] grantresults) { if(requestcode==1&&grantresults[0]==packagemanager.permission_granted){ startrecord(); }else { toast.maketext(this,"用户拒绝了权限",toast.length_short).show(); } super.onrequestpermissionsresult(requestcode, permissions, grantresults); } /** * ⑩定义播放音频的方法 */ private void play(string filename){ intent intent=new intent(intent.action_view); //播放音频需要uri,从文件中获取,文件中需要路径 uri uri=uri.fromfile(new file(sdcardfile.getabsolutefile()+file.separator+filename)); //设置播放数据和类型 intent.setdataandtype(uri,"audio/*"); startactivity(intent); }
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持移动技术网。
如对本文有疑问,请在下面进行留言讨论,广大热心网友会与你互动!! 点击进行留言回复
Android studio开发小型对话机器人app(实例代码)
Android通过Java sdk的方式接入OpenCv的方法
Android 通过cmake的方式接入opencv的方法步骤
Android Studio finish()方法的使用与解决app点击“返回”(直接退出)
Android 进度条 ProgressBar的实现代码(隐藏、出现、加载进度)
网友评论