Intereting Posts
Прозрачная строка состояния, не работающая с windowTranslucentNavigation = "false" Как определить будильник или другие приложения с помощью динамика? Как определить форму круга в файле чертежа android xml? В поле формы ввода в WebView не отображается мягкая клавиатура Сопоставление моделей устройств Android с удобочитаемыми брендами Как я могу переопределить java-метод и изменить значение nullability параметра? Использование Bluetooth в эмуляторе Android Сделать вызов API REST из IntentService или AsyncTask? Изменение платного Android-приложения для бесплатного использования в App Billing – дедушка существующих клиентов Как заставить экранную клавиатуру исчезать при изменении фокуса с одного текстового поля на другое JQUERY Мобильная форма перескакивает при вводе значений Когда использовать файлы res / xml vs.res / layout в Android Как узнать, что вызывает BadTokenExceptions Загрузка изображений в GridView с помощью универсального загрузчика изображений Создание базы данных веб-сервера для использования с Android-приложением

Как использовать камеру в Android для захвата изображений и видео?

Как использовать камеру в андроиде, чтобы пользователь мог переключаться между режимом камеры и режимом рекордера, находясь в том же приложении камеры, поскольку вы можете видеть небольшое слайд-управление в центре правой части изображения ниже.

Элемент управления слайдом окружен красным.

Приложение для настольной камеры является открытым исходным кодом. Почему бы просто не взглянуть на то, как это реализовано?

Добавьте кнопку переключения и установите в нем некоторое значение. Скажем, 0 или 1, а затем закрепите кнопку изображения / записи видео. И при переключении значение – 0 метод камеры вызова, а при переключении – 1 метод вызова вызова.

Здесь приведен код для видеозаписи и видеозаписи

Захват изображения

Запись видео

Реализовать оба класса в одном классе. А затем вызовите onSnapClick для камеры и startRecording () для видео.

Надеюсь, это поможет.

Попытайтесь использовать стандартные функции камеры и видео, например,

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(); } } }); 

Используйте кнопку буксировки One для изображения и другие для видео в пользовательском интерфейсе.

 /**** 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; } } 

Я не знаю, работает оно или нет, но попробуйте это

У вас должен быть MediaRecorder recorder; Camera camera; MediaRecorder recorder; Camera camera;

Попробуйте переключиться между видео и фотографией с помощью функции camera.setPreviewDisplay(holder); Или recorder.setPreviewDisplay(holder); В вашей surfaceCreated(SurfaceHolder holder) . Когда вы переключаетесь, вы должны воссоздать surfaceView. Приложение камеры камеры воссоздает всю активность.