当前位置: 首页 > 知识库问答 >
问题:

MediaStore。操作\u视频\u捕获未在牛轧糖7.0中保存视频

卜勇
2023-03-14

嗨,我一直在尝试使用意图从Nougat 7.0录制和保存视频,我可以录制视频,但不会保存在设备存储中。我甚至使用FileProvider来避免“FileUriExposedException”。但是当涉及捕获图像时,它会保存在下面指定的路径中。这是我的代码。

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

                }
        }
    }

上述代码适用于所有牛轧糖前版本。谁能为我提供一个更好的解决方案来录制视频并保存在设备存储中。

共有2个答案

范侯林
2023-03-14
    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();
            }
}
傅旺
2023-03-14

这里是解决方案!

如果您的targetSdkVersion为24或更高,我们必须使用FileProvider类来授予对特定文件或文件夹的访问权限,以便其他应用程序可以访问这些文件或文件夹。

Stackoverflow链接:android.os.FileUriExposedException:文件:///存储/仿真/0/test.txt通过Intent.getData()暴露在应用程序之外

此外,您还应该检查所需的权限android.Manifest.permission.CAMERA

 类似资料:
  • 我的应用程序在之前的Android版本上运行完美,在实际设备上从4.0测试到6.0.1。工作室仿真牛轧糖7.0和7.1没问题。然而,当我让我的朋友在他运行7.0的设备上测试APK时,这在几秒钟内就发生了: 崩溃通知 我没有访问该设备的权限(他住得很远),并且我无法在网上找到该特定错误的任何相关信息。原因可能是什么?

  • 例外 片段点击:- 在活动中, 详细活动清单, 图像加载使用毕加索, 模型类 从活动到片段的数据流, 我尝试过的解决方案 注意:-应用程序崩溃只在NOUGAT 最后,我实现了修复 将targetSdkVersion从25更改为23 更改后,我的应用程序在牛轧糖也不会崩溃。 我所要知道的就是这个合适的解决方案,或者有什么变通办法。 请引导到正确的方式。 提前谢谢。 碎片 选项卡布局 列表视图

  • OpenCV视频操作学习目标 学习阅读视频,显示视频和保存视频。 学习从摄像头捕捉并显示它。 您将学习这些功能:cv2.VideoCapture(),cv2.VideoWriter() 1、用摄像头捕获视频 通常,我们必须用摄像头捕捉实时流。OpenCV提供了一个非常简单的接口。让我们从摄像头中捕捉视频(我正在使用笔记本电脑的内置摄像头),将其转换为灰度视频并显示。只是一个简单的任务开始。 要捕捉

  • 在Android牛轧糖及以上版本中,从相机意图捕获图像的方法被改变了,下面的代码对我来说很好。 内容://com.example.demo.provider/external_files/camera/img_201712130_015646.jpg

  • 我尝试了太多的选项/博客/脚本来安装GooglePlay for Emulator(通过Android Studio运行),但都没有成功。我看到了很多不同的错误 失败[安装失败\u更新不兼容] 评论-为什么在Emulator上安装GooglePlay如此困难,有人能提供与Marshmallow/Noughat一起使用的步骤或GAPP吗。或者为什么谷歌不提供标准步骤来为模拟器安装GApps! 以下是

  • 我想录制一段视频,录制5秒后保存。我有以下在API上运行良好的代码 代码: 错误: 我检查了,错误是因为文件对象的语法,API不支持它 虽然我可以找到其他工作的代码,我很好奇,如果这个代码有一个小的调整,可以使它的API工作 有人能帮我吗? 编辑: 我尝试过:https://inthecheesefactory.com/blog/how-to-share-access-to-file-with-f