本文实例为大家分享了android调用手机摄像头拍照和录音功能的具体代码,供大家参考,具体内容如下
调用摄像头拍照:
public class mainactivity extends activity { private button button; private imageview imageview; @override protected void oncreate(bundle savedinstancestate) { super.oncreate(savedinstancestate); setcontentview(r.layout.activity_main); imageview= (imageview) findviewbyid(r.id.imageview); button= (button) findviewbyid(r.id.btn); button.setonclicklistener(new view.onclicklistener() { @override public void onclick(view view) { intent intent=new intent(mediastore.action_image_capture); startactivityforresult(intent,1); } }); } @override protected void onactivityresult(int requestcode, int resultcode, intent data) { super.onactivityresult(requestcode, resultcode, data); if(resultcode==result_ok){ bundle bundle=data.getextras(); bitmap bitmap= (bitmap) bundle.get("data"); if(environment.getexternalstoragestate().equals(environment.media_mounted)){ file file=new file(environment.getexternalstoragedirectory(),"myimage"); if(!file.exists()){ file.mkdir(); } try { string date=new simpledateformat("yyyymmddhhmmss").format(new date()); string path=file+"/"+date+".jpg"; fileoutputstream outputstream=new fileoutputstream(path); bitmap.compress(bitmap.compressformat.jpeg,100,outputstream); } catch (filenotfoundexception e) { e.printstacktrace(); } } imageview.setimagebitmap(bitmap); } } }
布局文件
<?xml version="1.0" encoding="utf-8"?> <linearlayout xmlns:android="http://schemas.android.com/apk/res/android" android:orientation="vertical" android:gravity="center" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" > <button android:id="@+id/btn" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="hello world!" /> <imageview android:id="@+id/imageview" android:layout_width="200dp" android:layout_height="200dp" /> </linearlayout>
调用录音功能:
public class main2activity extends activity implements view.onclicklistener,adapterview.onitemclicklistener{ private listview listview;//录音文件控件 private button btn1,btn2;//开始按钮和停止按钮 private mediarecorder recorder;//录音对象 private list<string> list=new arraylist<>();//录音文件数据源 private file path,recorderfile;//根目录,要存入sd卡的录音文件 private arrayadapter adapter;//适配器 @override protected void oncreate(bundle savedinstancestate) { super.oncreate(savedinstancestate); setcontentview(r.layout.activity_main2); init(); if(null!=path){ musiclist(); } } //初始化时获得所有录音文件 private void musiclist() { file home=path; //判断文件过滤器的长度是否大于0,大于则适配到listview上,小于则不设置上去 if(home.listfiles(new musicfilter()).length>0){ for(file file:home.listfiles(new musicfilter())){ list.add(file.getname()); } adapter=new arrayadapter(this,android.r.layout.simple_list_item_1,list); listview.setadapter(adapter); } } private void init() { listview= (listview) findviewbyid(r.id.listview); listview.setonitemclicklistener(this); btn1= (button) findviewbyid(r.id.start); btn2= (button) findviewbyid(r.id.stop); btn1.setonclicklistener(this); btn2.setonclicklistener(this); path=getpath();//获得根目录 } private file getpath() { file file=null; //判断sd卡状态 if(environment.getexternalstoragestate().equals(environment.media_mounted)){ file=environment.getexternalstoragedirectory(); }else{ toast.maketext(this,"没有sd卡",toast.length_short).show(); } return file; } @override public void onclick(view view) { switch (view.getid()){ //开始按钮 case r.id.start: startrecorder(); btn1.setenabled(false); btn2.setenabled(true); break; //停止按钮 case r.id.stop: stoprecorder(); btn1.setenabled(true); btn2.setenabled(false); break; } } private void stoprecorder() { //如果录音的文件不为null if(recorderfile!=null){ //停止录音 recorder.stop(); //把录音文件的名字加入集合里 list.add(recorderfile.getname()); if(adapter!=null){ //刷新适配器 adapter.notifydatasetchanged(); } //释放录音对象 recorder.release(); recorder=null; } } private void startrecorder() { //创建录音对象 recorder=new mediarecorder(); //设置麦克风 recorder.setaudiosource(mediarecorder.audiosource.mic); //设置转码类型 recorder.setoutputformat(mediarecorder.outputformat.three_gpp); //设置编码方式 recorder.setaudioencoder(mediarecorder.audioencoder.amr_nb); try { //创建录音文件 recorderfile=file.createtempfile("录音_",".amr",path); //设置录音的数据写到录音文件里 recorder.setoutputfile(recorderfile.getabsolutepath()); //录音准备 recorder.prepare(); //录音开始 recorder.start(); } catch (ioexception e) { e.printstacktrace(); } } @override public void onitemclick(adapterview<?> adapterview, view view, int i, long l) { //获得点击条目的路径 file file=new file(path.getabsolutepath()+file.separator+list.get(i)); playmusic(file); } //调用播放器播放点击的条目文件 private void playmusic(file file) { intent intent = new intent(intent.action_view); uri uri = uri.fromfile(file); intent.setdataandtype(uri, "audio/mp3"); startactivity(intent); } }
文件过滤代码:
public class musicfilter implements filenamefilter { @override public boolean accept(file file, string name) { return (name.endswith(".amr")); } }
布局文件:
<?xml version="1.0" encoding="utf-8"?> <linearlayout xmlns:android="http://schemas.android.com/apk/res/android" android:orientation="vertical" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent"> <button android:id="@+id/start" android:text="开始录音" android:layout_width="match_parent" android:layout_height="wrap_content" /> <button android:id="@+id/stop" android:text="停止录音" android:layout_width="match_parent" android:layout_height="wrap_content" /> <listview android:id="@+id/listview" android:layout_width="match_parent" android:layout_height="match_parent"></listview> </linearlayout>
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持。
声明:如若本站内容侵犯了原著者的合法权益,可联系我们进行处理。