0

您好我一直在嘗試使用意向錄製和保存來自Nougat 7.0的視頻,我可以錄製視頻,但不會保存在設備存儲中。我甚至使用FileProvider來避免'FileUriExposedException'。但是當它捕捉圖像時,它將被保存在下面指定的路徑中。 這是我的代碼。MediaStore.ACTION_VIDEO_CAPTURE不在Nougat 7.0中保存視頻

private Uri imageUri; 
    private File imageFile = null; 
    public File videoFilePath() { 
      return new File(getDefaultCameraPath(), "Video_" + System.currentTimeMillis() + ".mp4"); 
     } 
private void callCameraIntent(){ 
    Intent cameraIntent = new Intent(MediaStore.ACTION_VIDEO_CAPTURE); 
    imageFile = videoFilePath(); 
    imageUri = FileProvider.getUriForFile(CreatePostActivity.this, BuildConfig.APPLICATION_ID + ".provider", imageFile); 
    cameraIntent.putExtra(MediaStore.EXTRA_OUTPUT, imageUri); 
    startActivityForResult(cameraIntent, 2); 
} 
    protected void onActivityResult(int requestCode, int resultCode, Intent data) { 
      if (resultCode != Activity.RESULT_CANCELED) { 
      //Here it returns imageFile does not exist so it skips the if statement 
      if (resultCode == Activity.RESULT_OK && requestCode == 2 && imageFile != null && imageFile.exists()) { 

       } 
     } 
    } 

以上代碼適用於所有pre-Nougat版本。任何人都可以爲我提供更好的解決方案來記錄視頻並保存在設備存儲中。

+0

請解釋,詳細,什麼是「它不工作的視頻」的意思。請記住,對'EXTRA_OUTPUT'的'content''Uri'值的支持取決於對'ACTION_VIDEO_CAPTURE''Intent'做出響應的特定活動。某些相機應用程序將支持「內容」Uri值。其他人不會。例如,谷歌自己的相機應用直到今年夏天才支持它。 – CommonsWare

+0

@CommonsWare我的意思是我可以通過用'MediaStore.ACTION_IMAGE_CAPTURE'替換'MediaStore.ACTION_VIDEO_CAPTURE'使用上述方法來獲取相機圖像預覽,但是當涉及到視頻時,預覽不起作用。即使當我試圖從文件路徑中檢索視頻文件甚至不存在。對不起,回覆遲了:) –

+0

「預覽不起作用」是什麼意思?如果你的意思是說相機應用程序正在崩潰,這並不令人驚訝,儘管它令人失望。 – CommonsWare

回答

0
File Video_folder = new File(Environment.getExternalStorageDirectory(), 
"Sample/Videos") 
File videoMediaFile=null; 
    private void DispatchVideoRecordIntent() { 
      try { 
       videoMediaFile = File.createTempFile(
         "VID_" + System.currentTimeMillis(), 
         ".mp4", 
         Video_folder 
       ); 
       Intent takeVideoIntent = new Intent(MediaStore.ACTION_VIDEO_CAPTURE); 
       takeVideoIntent.putExtra(MediaStore.EXTRA_OUTPUT, Uri.fromFile(videoMediaFile)); 
       startActivityForResult(takeVideoIntent, REQUEST_VIDEO_CAPTURE); 
      } catch (Exception e) { 
       Log.e("Image Capturing", e.toString()); 
      } 
     } 



@Override 
    protected void onActivityResult(int requestCode, int resultCode, Intent data) { 
     super.onActivityResult(requestCode, resultCode, data); 
if (resultCode == RESULT_OK && requestCode == REQUEST_VIDEO_CAPTURE) { 
      if (!TextUtils.isEmpty(videoMediaFile.getAbsolutePath())) { 
         // videoMediaFile.getAbsolutePath() is your file path 

      } else { 
       Toast.makeText(this, "Unable to capture video.", Toast.LENGTH_SHORT).show(); 
      } 
} 
+0

完全解決了我的問題 –