android 7自定义相机预览及拍照功能

  

本文实例为大家分享了Android实现摄像头切换,拍照及保存到相册,预览等功能,解决android7拍照之后不能连续预览的问题,参数设置相关问题以及前后摄像头语言颠倒等问题。

        进口android.Manifest;   进口android.app.Activity;   进口android.content.Context;   进口android.content.Intent;   进口android.content.pm.PackageManager;   进口android.graphics.Bitmap;   进口android.graphics.BitmapFactory;   进口android.graphics.Matrix;   进口android.graphics.PixelFormat;   进口android.hardware.Camera;   进口android.net.Uri;   进口android.os.Build;   进口android.os.Bundle;   进口android.os.Environment;   进口handler;   进口android.support.v4.app.ActivityCompat;   进口android.util.Log;   进口android.view.KeyEvent;   进口android.view.SurfaceHolder;   进口android.view.SurfaceView;   进口android.view.View;   进口android.view.WindowManager;   进口android.widget.TextView;      进口com.hama.tracker.R;      进口java.io.File;   进口java.io.FileOutputStream;   进口java.io.IOException;   进口java.util.ArrayList;   进口java.util.Iterator;   进口并不知道;         公共类CamaraActivity扩展活动实现视图。OnClickListener {      @Bind (R.id.return_back)   TextView returnBack;   @Bind (R.id.tvswitch_camera)   TextView tvswitchCamera;//启动摄像机   私人相机mCamera;      公共布尔isopen_camara=false;   私人SurfaceView SurfaceView;   私人SurfaceHolder mholder=零;   私人SurfaceCallback previewCallBack;   私人布尔isTakingPhoto;//是否正在拍照      @Override   保护无效onCreate(包savedInstanceState) {   super.onCreate (savedInstanceState);   verifyPermission(新String [] {Manifest.permission.CAMERA});//getWindow () .setFlags (WindowManager.LayoutParams。FLAG_FULLSCREEN WindowManager.LayoutParams.FLAG_FULLSCREEN);   setContentView (R.layout.activity_camara);   ButterKnife.bind(这个);//预览控件   surfaceView=(surfaceView)   .findViewById (R.id.surfaceView);//设置参数   surfaceView.getHolder () .setKeepScreenOn(真正的);   surfaceView.getHolder () .setType (SurfaceHolder.SURFACE_TYPE_PUSH_BUFFERS);      returnBack.setOnClickListener(这个);   tvswitchCamera.setOnClickListener(这个);   .register EventBus.getDefault () ();   }      公共空间verifyPermission (String[]权限){   如果(权限!=null) {   List,列表=new ArrayList<的在();   for (int i=0;我& lt;permissions.length;我+ +){   如果(ActivityCompat。checkSelfPermission([我]),权限!=PackageManager.PERMISSION_GRANTED) {   如果(ActivityCompat。shouldShowRequestPermissionRationale(这个权限[我])){      }   [我]lists.add(权限);   }   }   如果(lists.size()在0) {   ps=新的字符串String [] [lists.size ());   for (int i=0;我& lt;lists.size ();我+ +){   ps[我]=lists.get(我);   }   ActivityCompat。requestPermissions (ps, 1);   }   }   }      @Override   保护无效onRestart () {   super.onRestart ();   }      @Override   保护无效onStart () {   super.onStart ();   }      私人空间takePhoto () {   如果(! isopen_camara) {   previewCallBack=new SurfaceCallback ();   surfaceView.getHolder () .addCallback (previewCallBack);   其他}{   autoTakePhoto ();   }   }         @Override   保护无效onResume () {   super.onResume ();   如果(mCamera==null) {   如果(! isopen_camara) {   previewCallBack=new SurfaceCallback ();   surfaceView.getHolder () .addCallback (previewCallBack);   }   }      }      @Override   公共空间onClick(查看v) {   开关(v.getId ()) {   案例R.id.return_back:   完成();   打破;   案例R.id.tvswitch_camera:   switchCamara ();   打破;   }   }//预览界面回调   最终类SurfaceCallback实现SurfaceHolder私人。回调{//预览界面被创建   公共空间surfaceCreated (SurfaceHolder持有人){   尝试{//1代表打开后置摄像头,0代表打开前置摄像头。   mCamera=Camera.open (cameraPosition);//打开摄像头   setparam(持有者,cameraPosition);   }捕捉(异常e) {   e.printStackTrace ();   如果(mCamera !=null) {   mCamera.stopPreview ();   mCamera.lock ();   mCamera.release ();   mCamera=零;   }   完成();//Toast.makeText (getApplicationContext()”,该手机不支持自动拍照功能”,Toast.LENGTH_LONG),告诉();   }   }      公共空surfaceChanged (SurfaceHolder持有人,int格式,int宽度,   int高度){   System.out.println (“surfaceChanged”);   isopen_camara=true;//autoTakePhoto ();   }//预览界面被销毁   公共空间surfaceDestroyed (SurfaceHolder持有人){   System.out.println (“surfaceDestroyed”);   如果(! isopen_camara)   返回;   如果(mCamera !=null) {   holder.removeCallback(这个);   mCamera.setPreviewCallback(空);   mCamera.stopPreview ();   mCamera.lock ();   mCamera.release ();   mCamera=零;   }   }      }      公共空间重置(){   相机。CameraInfo CameraInfo=new Camera.CameraInfo ();   如果(mCamera !=null) {   如果(surfaceView !=零,,surfaceView.getHolder() !=零,,previewCallBack !=null) {   surfaceView.getHolder () .removeCallback (previewCallBack);   }   mCamera.setPreviewCallback(空);   mCamera.stopPreview ();   mCamera.lock ();   mCamera.release ();   mCamera=零;      mCamera=Camera.open (cameraPosition);   如果(零!=mholder)   setparam (mholder cameraInfo.facing);   }      }      @Override   保护无效onDestroy () {   super.onDestroy ();   如果(mCamera !=null) {   如果(surfaceView !=零,,surfaceView.getHolder() !=零,,previewCallBack !=null) {   surfaceView.getHolder () .removeCallback (previewCallBack);   }   mCamera.setPreviewCallback(空);   mCamera.stopPreview ();   mCamera.lock ();   mCamera.release ();   mCamera=零;   }   ButterKnife.unbind(这个);   .unregister EventBus.getDefault () ();   }      null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null

android 7自定义相机预览及拍照功能