/MultiShotCamera

안드로이드 연속 촬영 카메라

Primary LanguageJava

What is MultiShotCamera?

This example implements a camera that takes several pictures at once and returns an ArrayList(Uri).
It does not provide many custom functions because it was created to protect code reuse and tone and manners within a project.

Preview


How to use

1. Check Permission

<!-- AndroidManifest.xml -->
<uses-permission android:name="android.permission.CAMERA" />
<uses-permission android:name="android.permission.RECORD_AUDIO" />
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />

2. CameraActivity

"CameraActivity" is used to take pictures.

Start CameraActivity

private void intentCameraActivity() {
       Intent intent = new Intent(this, CameraActivity.class);
       intent.setFlags(Intent.FLAG_ACTIVITY_SINGLE_TOP);
       startActivityForResult(intent, REQUEST_CODE_CAMERA);
   }

Intent Extra Option

  • intent.putExtra(CameraActivity.EXTRA_JPEG_QUALITY, int jpegQuality);
  • intent.putExtra(CameraActivity.EXTRA_CAPTURE_MIN_WIDTH, int minWidth);
  • intent.putExtra(CameraActivity.EXTRA_CAPTURE_MAX_WIDTH, int maxWidth);
  • intent.putExtra(CameraActivity.EXTRA_CAPTURE_MIN_HEIGHT, int minHeight);
  • intent.putExtra(CameraActivity.EXTRA_CAPTURE_MAX_HEIGHT, int maxHeight);
  • intent.putExtra(CameraActivity.EXTRA_LIMIT_CAPTURE_COUNT, int maxCount);

Result Capture Uris

@Override
    protected void onActivityResult(int requestCode, int resultCode, Intent data) {
        super.onActivityResult(requestCode, resultCode, data);
        switch (requestCode) {
            case REQUEST_CODE_CAMERA:
                if (resultCode != RESULT_OK) {
                    return;
                }
                ArrayList<Uri> captureUris = data.getParcelableArrayListExtra(CameraActivity.REQUEST_EXTRA_CAPTURE_URIS);
                if (captureUris == null) {
                    return;
                }
                for (Uri uri : captureUris) {
                    Log.e("TAG", "uri: " + uri);
                }
                Toast.makeText(this, "captureCount = " + captureUris.size(), Toast.LENGTH_SHORT).show();
                break;
        }
    }

3. CameraPreviewActivity

"CameraPreviewActivity" is used to check or delete pictures taken by CameraActivity.

Start CameraPreviewActivity

private void intentCapturePreviewActivity() {
        if (mCaptureUris.size() > 0) {
            Intent intent = new Intent(this, CameraPreviewActivity.class);
            intent.setFlags(Intent.FLAG_ACTIVITY_SINGLE_TOP);
            intent.putParcelableArrayListExtra(CameraPreviewActivity.EXTRA_CAPTURE_URIS, mCaptureUris);
            startActivityForResult(intent, REQUEST_CODE_CAMERA_PREVIEW_ACTIVITY);
        }
    }

Result Capture Uris

@Override
   protected void onActivityResult(int requestCode, int resultCode, Intent data) {
       super.onActivityResult(requestCode, resultCode, data);
       switch (requestCode) {
           case REQUEST_CODE_CAMERA_PREVIEW_ACTIVITY:
               if (resultCode != RESULT_OK) {
                   return;
               }
               
               ArrayList<Uri> newCaptureUris =
                       data.getParcelableArrayListExtra(CameraPreviewActivity.REQUEST_EXTRA_CAPTURE_URIS);

               if (mCaptureUris.size() != newCaptureUris.size()) {
                   mCaptureUris.clear();
                   mCaptureUris.addAll(newCaptureUris);
               }
               break;
       }
   }