0

こんにちは、意図を使ってNougat 7.0からビデオを録画して保存しようとしました。ビデオは録画できますが、デバイスストレージには保存されません。私はさらに 'FileUriExposedException'を避けるためにFileProviderを使用しました。しかし、画像をキャプチャする場合は、以下の指定されたパスに保存されます。 ここに私のコードです。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'に応答する特定のアクティビティーまでです。いくつかのカメラアプリは 'content' Uri'値をサポートします。他はしません。 Googleの独自のカメラアプリは今年の夏までこれをサポートしていませんでした。 – CommonsWare

+0

@CommonsWare私は、上記の方法で 'MediaStore.ACTION_VIDEO_CAPTURE'を' MediaStore.ACTION_IMAGE_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

は私の問題を完全に解決しました –

1

ここに解決策があります!

targetSdkVersionが24以上の場合、FileProviderクラスを使用して、特定のファイルやフォルダにアクセスして他のアプリケーションからアクセスできるようにする必要があります。

StackOverflowのリンク: android.os.FileUriExposedException: file:///storage/emulated/0/test.txt exposed beyond app through Intent.getData()

また、あなたが必要な許可android.Manifest.permission.CAMERA

+0

だから、解決策は何ですか?私は同じ問題を抱えています。 – ingyesid

関連する問題