В моем случае я хочу сделать снимок или захватить видео, на самом деле я могу сделать это, если создам отдельные намерения. Я имею в виду, что я могу открывать камеру как режим изображения или видеорежима, но не могу переключаться между ними. Связано ли это с фильтрами намерений, которые я использую? Что мне делать? Как переключаться между ними?Как открыть камеру, затем переключиться в режим изображения (наоборот)
0
A
ответ
0
У меня была та же проблема. Я сделал вид на поверхности и операцию для фотоаппарата после того, как я подумал, положить кнопку для записи видео в тот же вид деятельности с тем же видом поверхности, но я не знаю, было ли это возможно. Ну, я написал этот метод в Activity, чтобы подготовить MediaRecorder и получить представление поверхности.
public Boolean prepararCamaraVideo(){
mMediaRecorder = new MediaRecorder();
mCamera.unlock();
mMediaRecorder.setCamera(mCamera);
mMediaRecorder.setAudioSource(MediaRecorder.AudioSource.CAMCORDER);
mMediaRecorder.setVideoSource(MediaRecorder.VideoSource.CAMERA);
state = MediaRecorderState.INITIALIZED;
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.FROYO)
mMediaRecorder.setProfile(CamcorderProfile.get(CamcorderProfile.QUALITY_HIGH));
else {
mMediaRecorder.setOutputFormat(MediaRecorder.OutputFormat.MPEG_4);
mMediaRecorder.setAudioEncoder(MediaRecorder.AudioEncoder.AMR_NB);
mMediaRecorder.setVideoEncoder(MediaRecorder.VideoEncoder.MPEG_4_SP);
}
state = MediaRecorderState.DATA_SOURCE_CONFIGURED;
mOutputFile = Files.getExternalMediaFile(Files.MEDIA_TYPE_VIDEO).toString();
mMediaRecorder.setOutputFile(mOutputFile);
mMediaRecorder.setPreviewDisplay(mCameraPreview.getHolder().getSurface());
try {
mMediaRecorder.prepare();
} catch (IllegalStateException e) {
Log.d("Video", "IllegalStateException preparing MediaRecorder: " + e.getMessage());
releaseMediaRecorder();
return false;
} catch (IOException e) {
Log.d("Video", "IOException preparing MediaRecorder: " + e.getMessage());
releaseMediaRecorder();
return false;
}
return true;
}
Эта команда mMediaRecorder.setPreviewDisplay (mCameraPreview.getHolder() getSurface().); получить поверхность для видеокамеры.
И наконец, способ записи видео.
public void grabaVideo(View v) {
if (state!=MediaRecorderState.RECORDING){
if (prepararCamaraVideo()) {
mMediaRecorder.start();
state = MediaRecorderState.RECORDING;
Toast.makeText(getApplicationContext(), getString(R.string.capturing_video), Toast.LENGTH_SHORT).show();
} else {
// prepare didn't work, release the camera
releaseMediaRecorder();
// inform user
}
}
else{
mMediaRecorder.stop(); // stop the recording
releaseMediaRecorder(); // release the MediaRecorder object
mCamera.lock(); // take camera access back from MediaRecorder
state = MediaRecorderState.INITIAL;
Toast.makeText(getApplicationContext(), getString(R.string.video_stored_in) + " " + mOutputFile, Toast.LENGTH_SHORT).show();
}
}
Я надеюсь вам помочь.
Вам нужно получить камеру с помощью намерения или вы можете использовать класс камеры для Android? – Talha
Я использовал этот путь, потому что его управление было легким. У вас есть какой-нибудь учебник об этом? –
Но вы не можете переключать режим, используя этот способ. – Talha