本文实例为大家分享了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" />
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持。
声明:如若本站内容侵犯了原著者的合法权益,可联系我们进行处理。