千家信息网

Android中如何实现无预览拍照功能

发表于:2025-01-16 作者:千家信息网编辑
千家信息网最后更新 2025年01月16日,这篇文章主要介绍"Android中如何实现无预览拍照功能"的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇"Android中如何实现无预览拍照功能"文章能帮助大家解
千家信息网最后更新 2025年01月16日Android中如何实现无预览拍照功能

这篇文章主要介绍"Android中如何实现无预览拍照功能"的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇"Android中如何实现无预览拍照功能"文章能帮助大家解决问题。

代码如下:

public void onTakePhotoClicked() {   final SurfaceView preview = new SurfaceView(this);   SurfaceHolder holder = preview.getHolder();   // deprecated setting, but required on Android versions prior to 3.0holder.setType(SurfaceHolder.SURFACE_TYPE_PUSH_BUFFERS); holder.addCallback(new SurfaceHolder.Callback() {     @Override     //The preview must happen at or after this point or takePicture fails     public void surfaceCreated(SurfaceHolder holder) {       Log.d(TAG, "Surface created");        camera = null;       try {         camera = Camera.open(Camera.CameraInfo.CAMERA_FACING_BACK);         Log.d(TAG, "Opened camera");         try {           camera.setPreviewDisplay(holder);         } catch (IOException e) {           throw new RuntimeException(e);         }         camera.startPreview();         Log.d(TAG, "Started preview");      //延时拍照         ThreadUtils.postOnUiThreadDelayed(new Runnable() {           @Override           public void run() {             Log.e("zgj","开始拍照");             camera.takePicture(null, null, CameraService.this);           }         },5000);       } catch (Exception e) {         if (camera != null)           camera.release();         throw new RuntimeException(e);       }     }     @Override     public void surfaceDestroyed(SurfaceHolder holder) {}     @Override     public void surfaceChanged(SurfaceHolder holder, int format, int width, int height) {}   });   WindowManager wm = (WindowManager)getSystemService(Context.WINDOW_SERVICE);   WindowManager.LayoutParams params = new WindowManager.LayoutParams(       1, 1, //Must be at least 1x1       WindowManager.LayoutParams.TYPE_SYSTEM_OVERLAY,       0,       //Don't know if this is a safe default       PixelFormat.UNKNOWN);   //Don't set the preview visibility to GONE or INVISIBLE   wm.addView(preview, params); } @Override public void onPictureTaken(byte[] bytes, Camera camera) {   Log.e("zgj", "拍照结束");   File pictureDir = Environment.getExternalStorageDirectory();   if (pictureDir == null) {     Log.d("zgj",         "Error creating media file, check storage permissions!");     return;   }   try {     String pictureName = "ssss.png";     File file = new File(pictureDir + "/pic/");     if (!file.exists()) {       file.mkdir();     }     file = new File(pictureDir + "/pic/" + pictureName);     FileOutputStream fos = new FileOutputStream(file);     fos.write(bytes);     fos.close();   } catch (FileNotFoundException e) {     Log.d("zgj", "File not found: " + e.getMessage());   } catch (IOException e) {     Log.d("zgj", "Error accessing file: " + e.getMessage());   } }

关于"Android中如何实现无预览拍照功能"的内容就介绍到这里了,感谢大家的阅读。如果想了解更多行业相关的知识,可以关注行业资讯频道,小编每天都会为大家更新不同的知识点。

0