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添加用户权限
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持脚本之家。
推荐阅读
- 了解Android|了解Android Framework层对工作有什么帮助吗()
- 2022金三银四面试季,Android面试真题解析(腾讯,百度,华为,搜狗和滴滴...)
- Android|Android BLE 蓝牙开发——扫码枪基于BLESSED
- 2022全网最全Android|2022全网最全Android jetpack Compose开发应用指南,从理论基础到项目实战
- c++|一文读懂 Android FFmpeg 视频解码过程与实战分析
- Android|Android 12(S) 图形显示系统 - 简述Allocator/Mapper HAL服务的获取过程(十五)
- 面试官(来说一说Go语言的函数调用惯例)
- Android|Android 12(S) 图形显示系统 - 解读Gralloc架构及GraphicBuffer创建/传递/释放(十四)
- C#调用USB摄像头的方法
- Android程序员现状(没有架构师的命,却得了架构师的病)