本文实例为大家分享了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>

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持。