本文实例为大家分享了android调用外置摄像头的具体代码,供大家参考,具体内容如下

1、布局文件

<?xml version="1.0" encoding="utf-8"?>
<relativelayout android:layout_width="match_parent"
    android:layout_height="match_parent"
    xmlns:android="http://schemas.android.com/apk/res/android">

    <textureview
        android:id="@+id/textureview"
        android:layout_width="1dp"
        android:layout_height="1dp"/>

    <imagebutton
        android:id="@+id/play"
        android:layout_width="60dp"
        android:layout_height="60dp"
        android:layout_centerhorizontal="true"
        android:layout_alignparentbottom="true"
        android:background="@drawable/ic_launcher_background"
        android:contentdescription="@string/app_name"
        android:layout_marginbottom="10dp"/>

</relativelayout>

2、相应的mainactivity.java的主要代码如下

package com.deepreality.takephotowithusbcamera;

import android.manifest;
import android.graphics.bitmap;
import android.graphics.bitmapfactory;
import android.graphics.surfacetexture;
import android.hardware.camera;
import android.support.v7.app.appcompatactivity;
import android.os.bundle;
import android.util.log;
import android.view.textureview;
import android.view.view;
import android.widget.imagebutton;
import android.widget.toast;

import com.tbruyelle.rxpermissions2.rxpermissions;

import java.io.bufferedoutputstream;
import java.io.file;
import java.io.fileoutputstream;
import java.io.ioexception;
import java.text.simpledateformat;
import java.util.date;

public class mainactivity extends appcompatactivity implements textureview.surfacetexturelistener, view.onclicklistener {

    private static final string tag = mainactivity.class.getsimplename();
    private camera mcamera;
    private imagebutton mplaybutton;

    private rxpermissions rxpermissions;
    private int permissionnum;

    @override
    protected void oncreate(bundle savedinstancestate) {
        super.oncreate(savedinstancestate);
        setcontentview(r.layout.activity_main);

        rxpermissions = new rxpermissions(mainactivity.this);
        checkuserallpermissions();

        mplaybutton = (imagebutton) findviewbyid(r.id.play);
        mplaybutton.setonclicklistener(this);
        ((textureview) findviewbyid(r.id.textureview))
                .setsurfacetexturelistener(this);
    }

    private void takepic() {
        if (mcamera != null) {
            //调用抓拍摄像头抓拍
            mcamera.takepicture(null, null, picturecallback);
        } else {
            log.e("tag", "请检查摄像头!");
        }
    }

    private bitmap mbitmap;
    public camera.picturecallback picturecallback = new camera.picturecallback() {

        @override
        public void onpicturetaken(byte[] data, camera camera) {
            log.i("ygy", "onpicturetaken");
            simpledateformat df = new simpledateformat("yyyy-mm-dd hh:mm:ss");//设置日期格式
            system.out.println(df.format(new date()));// new date()为获取当前系统时间
            string picname = df.format(new date());
            toast.maketext(getapplicationcontext(), "正在保存...", toast.length_long).show();
            mbitmap = bitmapfactory.decodebytearray(data, 0, data.length);
            file file = new file("/storage/emulated/0/" + picname + ".jpg");
            try {
                file.createnewfile();
                bufferedoutputstream os = new bufferedoutputstream(new fileoutputstream(file));
                mbitmap.compress(bitmap.compressformat.jpeg, 100, os);
                os.flush();
                os.close();
                toast.maketext(getapplicationcontext(), "图像保存成功", toast.length_long).show();
            } catch (ioexception e) {
                e.printstacktrace();
            }
        }

    };

    @override
    public void onsurfacetextureavailable(surfacetexture surface, int width, int height) {
        mcamera = camera.open(0);
        if (mcamera != null) {
            try {
                mcamera.setpreviewtexture(surface);
                mcamera.startpreview();
            } catch (ioexception e) {
                log.d("tag", e.getmessage());
            }
        }
    }

    @override
    protected void onstop() {
        if (mcamera != null) {
            mcamera.stoppreview();
            mcamera.release();
            mcamera = null;
        }
        super.onstop();
    }

    @override
    public void onsurfacetexturesizechanged(surfacetexture surface, int width, int height) {

    }

    @override
    public boolean onsurfacetexturedestroyed(surfacetexture surface) {
        if (mcamera != null) {
            mcamera.stoppreview();
            mcamera.release();
            mcamera = null;
        }
        return false;
    }

    @override
    public void onsurfacetextureupdated(surfacetexture surface) {

    }

    @override
    public void onclick(view v) {
        if (mcamera == null) {
            return;
        }
        takepic();
    }

    /**
     * 检查并获取用户权限
     */
    private void checkuserallpermissions() {
        rxpermissions
                .requesteach(manifest.permission.write_external_storage,
                        manifest.permission.camera
                )
                .subscribe(permission -> {
                    if (permission.granted) {
                    } else if (permission.shouldshowrequestpermissionrationale) {
                    } else {}
                    permissionnum ++;
                    if (permissionnum == 2) {

                    }
                });
    }
}

3、注意在清单文件里androidmanifest.xml添加用户权限

<uses-permission android:name="android.permission.camera" />
<uses-permission android:name="android.permission.write_external_storage" />

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