Android调用外置摄像头的方法

【Android调用外置摄像头的方法】本文实例为大家分享了Android调用外置摄像头的具体代码,供大家参考,具体内容如下
1、布局文件


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; @Overrideprotected 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() {@Overridepublic 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(); }}}; @Overridepublic 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()); }}}@Overrideprotected void onStop() {if (mCamera != null) {mCamera.stopPreview(); mCamera.release(); mCamera = null; }super.onStop(); }@Overridepublic void onSurfaceTextureSizeChanged(SurfaceTexture surface, int width, int height) {}@Overridepublic boolean onSurfaceTextureDestroyed(SurfaceTexture surface) {if (mCamera != null) {mCamera.stopPreview(); mCamera.release(); mCamera = null; }return false; }@Overridepublic void onSurfaceTextureUpdated(SurfaceTexture surface) {}@Overridepublic 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添加用户权限

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

    推荐阅读