2017-12-24 18 views
0

코드가 작동한다고 가정하지만 녹화를 중지하기 위해 비디오 단추를 클릭하면 "치명적인 예외"라는 오류가 발생하고 회선 mMediaRecorder.stop();이 작동하지 않는다고 표시됩니다.대신 앱을 클릭하여 시작하면 동영상이 멈추고 동영상이 정지되는 이유를 알아내는 데 도움이 필요합니까?

private CameraDevice.StateCallback mCameraDeviceStateCallback = new CameraDevice.StateCallback() { 
    @Override 
    public void onOpened(@NonNull CameraDevice camera) { //camera device member return back to me 

     mCameraDevice = camera; 
     // Toast.makeText(getApplicationContext(), "Camera connection made!", Toast.LENGTH_SHORT).show(); 
     // ^indicates camera is connected 

     if (mIsRecording){ 

      try{ 
       createVideoFileName(); 
      } 
      catch(IOException e) { 
       e.printStackTrace(); 
      } 

      startRecord(); 
      mMediaRecorder.start(); 
     } 

     else { 
      startPreview(); 
     } 
    } 







//makes this marshallow version compatible for Android because from Marshallow version and onwards we needed... 
//...the permissions required. 
private void checkWriteStoragePermission(){ 
    // v check to support applications on devices older than Marshmallow version in Android 
    if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.lollipop) { //support Marshallow or later versions 


     // v check to see if granted permission 
     if (ContextCompat.checkSelfPermission(this, Manifest.permission.WRITE_EXTERNAL_STORAGE) == 
       PackageManager.PERMISSION_GRANTED) { 

      mIsRecording = true; 
      mRecordImageButton.setImageResource(R.drawable.btn_video_busy); //not recording 

      try { 
       createVideoFileName(); //was giving an unhandled exception java long error so needed try/catch here 
      } catch (IOException e) { 
       e.printStackTrace(); 
      } 


      startRecord(); 
      mMediaRecorder.start(); 



     }/* else {  //check if permission was granted and had been denied 
      if (shouldShowRequestPermissionRationale(Manifest.permission.WRITE_EXTERNAL_STORAGE)) { 
       Toast.makeText(this, "app needs to be able to save videos", Toast.LENGTH_SHORT).show(); 
      } 
      requestPermissions(new String[]{Manifest.permission.WRITE_EXTERNAL_STORAGE}, REQUEST_WRITE_EXTERNAL_STORAGE_PERMISSION_RESULT); 
     } */ 
    } 

    else //if running older versions than Marshallow, not going to worry about it, so build "else" statement 
    { // supporting old versions of Android 
     mIsRecording = true; 
     mRecordImageButton.setImageResource(R.drawable.btn_video_busy); //not recording 

     try{ 
      createVideoFileName(); 
     } 
     catch (IOException e){ 
      e.printStackTrace(); 
     } 

     startRecord(); 
     mMediaRecorder.start(); 

    } 
} 







@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_camera); 

    createVideoFolder(); //creates the video folder when camera page loads 

    mMediaRecorder = new MediaRecorder(); 

    mTextureView = (TextureView) findViewById(R.id.textureView); 
    mRecordImageButton = (ImageButton) findViewById(R.id.videoOnlineImageButton); 


    mRecordImageButton.setOnClickListener(new View.OnClickListener() { 
     @Override 
     public void onClick(View v) { 
      if (mIsRecording) { 

       mIsRecording = false; 
       mRecordImageButton.setImageResource(R.drawable.btn_video_online); 

       mMediaRecorder.stop(); //<-- FATAL EXCEPTION CRASH 

       mMediaRecorder.reset(); 

       startPreview(); //< this code says = once it's stops recording TextureView preview still continues 

      } else { 
       checkWriteStoragePermission(); 

      } 
     } 
    }); 

} 



    private void createVideoFolder() { 
    File movieFile = Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_MOVIES); 
    mVideoFolder = new File(movieFile, "camera2VideoImage");  
    if(!mVideoFolder.exists()) { 
     mVideoFolder.mkdirs(); 
    } 
} 





12-23 22:23:07.509 14045-14045/com.example.name.videoscrolltrial E/MediaRecorder: stop failed: -1007 
12-23 22:23:07.510 14045-14045/com.example.name.videoscrolltrial D/AndroidRuntime: Shutting down VM 
12-23 22:23:07.511 14045-14045/com.example.name.videoscrolltrial E/AndroidRuntime: FATAL EXCEPTION: main               

Process: com.example.name.videoscrolltrial, PID: 14045 
                         java.lang.RuntimeException: stop failed. 
                          at android.media.MediaRecorder._stop(Native Method) 
                          at android.media.MediaRecorder.stop(MediaRecorder.java:1220) 
                          at com.example.name.videoscrolltrial.Camera$3.onClick(Camera.java:192) //< causes the crash, this is mMediaRecorder.stop(); 
                          at android.view.View.performClick(View.java:6308) 
                          at android.view.View$PerformClick.run(View.java:23969) 
                          at android.os.Handler.handleCallback(Handler.java:751) 
                          at android.os.Handler.dispatchMessage(Handler.java:95) 
                          at android.os.Looper.loop(Looper.java:154) 
                          at android.app.ActivityThread.main(ActivityThread.java:6823) 
                          at java.lang.reflect.Method.invoke(Native Method) 
                          at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1563) 
                          at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1451) 

이 코드는이 충돌을 제공뿐만 아니라 않는 넥서스 5 배와 같은 휴대폰에 대한하지만 내 삼성 갤럭시 노트 8 일 :

여기 내 코드입니다. 코드가 모든 전화기와 호환되도록하기 위해 내가해야 할 일을 이해하지 못합니까?

답변

0

먼저 MediaRecorder를 시작하지 않고 중지 할 수 없습니다.

+0

방금 ​​시도했는데 "W/System.err : java.lang.RuntimeException : stop failed"오류가 발생했습니다. – iBEK

+0

mediaRecorder를 시작하셨습니까? – InziKhan

+0

코드에서 볼 수 없습니다. – InziKhan