Open camera inside fragment

后端 未结 2 1262
庸人自扰
庸人自扰 2021-02-15 14:53

Is it possible to use camera in fragment like view, so that it wouldn\'t open another app and go away from my special app?

I want something

2条回答
  •  滥情空心
    2021-02-15 15:31

    Yes it is, Check this link .

    Basically overwritting the SurfaceView and integrating the camera picture callback.

    example code :

    /* Surface on which the camera projects it's capture results.
    */
    class CameraPreview extends SurfaceView implements SurfaceHolder.Callback {
            SurfaceHolder mHolder;
            Camera mCamera;
    
            public CameraPreview(Context context, Camera camera) {
                super(context);
                mCamera = camera;
    
                // Install a SurfaceHolder.Callback so we get notified when the
                // underlying surface is created and destroyed.
                mHolder = getHolder();
                mHolder.addCallback(this);
                // deprecated setting, but required on Android versions prior to 3.0
                mHolder.setType(SurfaceHolder.SURFACE_TYPE_PUSH_BUFFERS);
            }
    
            public void surfaceCreated(SurfaceHolder holder) {
                // The Surface has been created, now tell the camera where to draw the preview.
                try {
                    mCamera.setPreviewDisplay(holder);
                    mCamera.startPreview();
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
    
            public void surfaceDestroyed(SurfaceHolder holder) {
                // empty. Take care of releasing the Camera preview in your activity.
            }
    
            public void surfaceChanged(SurfaceHolder holder, int format, int w, int h) {
                // If your preview can change or rotate, take care of those events here.
                // Make sure to stop the preview before resizing or reformatting it.
    
                if (mHolder.getSurface() == null){
                    // preview surface does not exist
                    return;
                }
    
                // stop preview before making changes
                try {
                    mCamera.stopPreview();
                } catch (Exception e){
                    // ignore: tried to stop a non-existent preview
                }
    
                // set preview size and make any resize, rotate or
                // reformatting changes here
    
                // start preview with new settings
                try {
                    mCamera.setPreviewDisplay(mHolder);
                    mCamera.startPreview();
    
                } catch (Exception e){
                    e.printStackTrace();
                }
            }
        }
    

    with a camera picture callback like:

    private Camera.PictureCallback mPicture = new Camera.PictureCallback() {
    
            @Override
            public void onPictureTaken(byte[] data, Camera camera) {
    
                File pictureFile = getOutputMediaFile();
                if (pictureFile == null){
                    Toast.makeText(getActivity(), "Image retrieval failed.", Toast.LENGTH_SHORT)
                    .show();
                    return;
                }
    
                try {
                    FileOutputStream fos = new FileOutputStream(pictureFile);
                    fos.write(data);
                    fos.close();
                } catch (FileNotFoundException e) {
                    e.printStackTrace();
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
        };
    

提交回复
热议问题