2012-12-25 3 views
0

В моем случае я хочу сделать снимок или захватить видео, на самом деле я могу сделать это, если создам отдельные намерения. Я имею в виду, что я могу открывать камеру как режим изображения или видеорежима, но не могу переключаться между ними. Связано ли это с фильтрами намерений, которые я использую? Что мне делать? Как переключаться между ними?Как открыть камеру, затем переключиться в режим изображения (наоборот)

+0

Вам нужно получить камеру с помощью намерения или вы можете использовать класс камеры для Android? – Talha

+0

Я использовал этот путь, потому что его управление было легким. У вас есть какой-нибудь учебник об этом? –

+0

Но вы не можете переключать режим, используя этот способ. – Talha

ответ

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

    } 

} 

Я надеюсь вам помочь.

 Смежные вопросы

  • Нет связанных вопросов^_^