How to use the camera in android to capture images and videos?

How to use the camera in android so that the user can switch between camera mode and recording mode in the same camera application, since you can see a small slide control in the center of the right part of the image below.

The slide control is circled in red.

+4
source share
5 answers

The camera application for storing data is open source. Why not just look at how it is implemented?

+9
source

Add a switch button and set some value in it. let's say 0 or 1 and then lock the image / video button. and when the switching value is 0, the call camera method, and when the switching value is 1 call method.

here is the code for the camera and video

Image capture

Video recording

implement both classes in one class. and then call onSnapClick for the camera and startRecording () for the video.

Hope this helps.

+4
source

Use the tow button One for the image and others for the video in the user interface.

/**** Camera / Video Demo ****************/ public class CameraDemoActivity extends Activity { // Activity request codes private static final int CAMERA_CAPTURE_IMAGE_REQUEST_CODE = 100; private static final int CAMERA_CAPTURE_VIDEO_REQUEST_CODE = 200; public static final int MEDIA_TYPE_IMAGE = 1; public static final int MEDIA_TYPE_VIDEO = 2; // directory name to store captured images and videos private static final String IMAGE_DIRECTORY_NAME = "Hello Camera"; private Uri fileUri; // file url to store image/video private ImageView imgPreview; private VideoView videoPreview; private Button btnCapturePicture, btnRecordVideo; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); imgPreview = (ImageView) findViewById(R.id.imgPreview); videoPreview = (VideoView) findViewById(R.id.videoPreview); btnCapturePicture = (Button) findViewById(R.id.btnCapturePicture); btnRecordVideo = (Button) findViewById(R.id.btnRecordVideo); /* * Capture image button click event */ btnCapturePicture.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { // capture picture captureImage(); } }); /* * Record video button click event */ btnRecordVideo.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { // record video recordVideo(); } }); // Checking camera availability if (!isDeviceSupportCamera()) { Toast.makeText(getApplicationContext(), "Sorry! Your device doesn't support camera", Toast.LENGTH_LONG).show(); // will close the app if the device does't have camera finish(); } } /** * Checking device has camera hardware or not * */ private boolean isDeviceSupportCamera() { if (getApplicationContext().getPackageManager().hasSystemFeature( PackageManager.FEATURE_CAMERA)) { // this device has a camera return true; } else { // no camera on this device return false; } } /* * Capturing Camera Image will lauch camera app requrest image capture */ private void captureImage() { Intent intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE); fileUri = getOutputMediaFileUri(MEDIA_TYPE_IMAGE); intent.putExtra(MediaStore.EXTRA_OUTPUT, fileUri); // start the image capture Intent startActivityForResult(intent, CAMERA_CAPTURE_IMAGE_REQUEST_CODE); } /* * Here we store the file url as it will be * null after returning from camera * app */ @Override protected void onSaveInstanceState(Bundle outState) { super.onSaveInstanceState(outState); // save file url in bundle as it will be null on scren orientation // changes outState.putParcelable("file_uri", fileUri); } @Override protected void onRestoreInstanceState(Bundle savedInstanceState) { super.onRestoreInstanceState(savedInstanceState); // get the file url fileUri = savedInstanceState.getParcelable("file_uri"); } /* * Recording video */ private void recordVideo() { Intent intent = new Intent(MediaStore.ACTION_VIDEO_CAPTURE); fileUri = getOutputMediaFileUri(MEDIA_TYPE_VIDEO); // set video quality intent.putExtra(MediaStore.EXTRA_VIDEO_QUALITY, 1); intent.putExtra(MediaStore.EXTRA_OUTPUT, fileUri); // set the // image file // name // start the video capture Intent startActivityForResult(intent, CAMERA_CAPTURE_VIDEO_REQUEST_CODE); } /** * Receiving activity result method * will be called after closing the camera * */ @Override protected void onActivityResult(int requestCode, int resultCode, Intent data) { // if the result is capturing Image if (requestCode == CAMERA_CAPTURE_IMAGE_REQUEST_CODE) { if (resultCode == RESULT_OK) { // successfully captured the image // display it in image view previewCapturedImage(); } else if (resultCode == RESULT_CANCELED) { // user cancelled Image capture Toast.makeText(getApplicationContext(), "User cancelled image capture", Toast.LENGTH_SHORT) .show(); } else { // failed to capture image Toast.makeText(getApplicationContext(), "Sorry! Failed to capture image", Toast.LENGTH_SHORT) .show(); } } else if (requestCode == CAMERA_CAPTURE_VIDEO_REQUEST_CODE) { if (resultCode == RESULT_OK) { // video successfully recorded // preview the recorded video previewVideo(); } else if (resultCode == RESULT_CANCELED) { // user cancelled recording Toast.makeText(getApplicationContext(), "User cancelled video recording", Toast.LENGTH_SHORT) .show(); } else { // failed to record video Toast.makeText(getApplicationContext(), "Sorry! Failed to record video", Toast.LENGTH_SHORT) .show(); } } } /* * Display image from a path to ImageView */ private void previewCapturedImage() { try { // hide video preview videoPreview.setVisibility(View.GONE); imgPreview.setVisibility(View.VISIBLE); // bimatp factory BitmapFactory.Options options = new BitmapFactory.Options(); // downsizing image as it throws OutOfMemory Exception for larger // images options.inSampleSize = 8; final Bitmap bitmap = BitmapFactory.decodeFile(fileUri.getPath(), options); imgPreview.setImageBitmap(bitmap); } catch (NullPointerException e) { e.printStackTrace(); } } /* * Previewing recorded video */ private void previewVideo() { try { // hide image preview imgPreview.setVisibility(View.GONE); videoPreview.setVisibility(View.VISIBLE); videoPreview.setVideoPath(fileUri.getPath()); // start playing videoPreview.pause(); } catch (Exception e) { e.printStackTrace(); } } /** * ------------ Helper Methods ---------------------- * */ /* * Creating file uri to store image/video */ public Uri getOutputMediaFileUri(int type) { return Uri.fromFile(getOutputMediaFile(type)); } /* * returning image / video */ private static File getOutputMediaFile(int type) { // External sdcard // location.getExternalStoragePublicDirectory( // Environment.DIRECTORY_PICTURES),IMAGE_DIRECTORY_NAME); File mediaStorageDir = new File( Environment .getExternalStorageDirectory(), IMAGE_DIRECTORY_NAME); // Create the storage directory if it does not exist if (!mediaStorageDir.exists()) { if (!mediaStorageDir.mkdirs()) { Log.d(IMAGE_DIRECTORY_NAME, "Oops! Failed create " + IMAGE_DIRECTORY_NAME + " directory"); return null; } } // Create a media file name String timeStamp = new SimpleDateFormat("yyyyMMddHHmmss", Locale.getDefault()).format(new Date()); File mediaFile; if (type == MEDIA_TYPE_IMAGE) { mediaFile = new File(mediaStorageDir.getPath() + File.separator + "IMG_" + timeStamp + ".jpg"); } else if (type == MEDIA_TYPE_VIDEO) { mediaFile = new File(mediaStorageDir.getPath() + File.separator + "VID_" + timeStamp + ".mp4"); } else { return null; } return mediaFile; } } 
+4
source

Try using standard camera and video features like this -

 Intent intent1 = new Intent(MediaStore.ACTION_IMAGE_CAPTURE); String fileName = "KeyICamImage"+System.currentTimeMillis()+".JPG"; String mPathImage = Environment.getExternalStorageDirectory()+ "/" + fileName; file = new File(mPathImage); mImageCaptureUri= Uri.fromFile( file ); try { intent1.putExtra(android.provider.MediaStore.EXTRA_OUTPUT,mImageCaptureUri); startActivityForResult(intent1, PICK_FROM_CAMERA); } catch (Exception e) { e.printStackTrace(); } } }); 
+3
source

I don’t know if it works or not, but try this

You must have a MediaRecorder recorder; Camera camera; MediaRecorder recorder; Camera camera;

Try switching between videos and photos with camera.setPreviewDisplay(holder); or recorder.setPreviewDisplay(holder); in surfaceCreated(SurfaceHolder holder) . When you switch, you must recreate the surfaceView. The camera-to-camera application recreates all the activity.

0
source

Source: https://habr.com/ru/post/1446170/


All Articles