将内容URI与ACTION_VIDEO_CAPTURE一起使用

时间:2016-06-09 13:58:39

标签: android camera video-capture mediastore android-fileprovider

我目前正在我的文件提供程序上使用内容URI来检索ACTION_IMAGE_CAPTURE意图返回的相机图像。这很好。

由于某些奇怪的原因,尝试从相机检索视频文件时,同一个呼叫无效。

        destinationFile = File.createTempFile("video", ".mp4", this.getFilesDir());
        Uri uri = FileProvider.getUriForFile(this, getPackageName() + ".fileprovider", destinationFile);

        Intent cameraIntent = new Intent(MediaStore.ACTION_VIDEO_CAPTURE);
        cameraIntent.addFlags(Intent.FLAG_GRANT_WRITE_URI_PERMISSION | Intent.FLAG_GRANT_READ_URI_PERMISSION);
        cameraIntent.setClipData(ClipData.newRawUri(null, uri));
        cameraIntent.putExtra(MediaStore.EXTRA_OUTPUT, uri);
        startActivityForResult(cameraIntent, ID);

当意图在onActivityResult()中返回时,destinationFile为空。

简单地用MediaStore.ACTION_VIDEO_CAPTURE替换MediaStore.ACTION_IMAGE_CAPTURE可以得到预期的行为:捕获的图像保存在destinationFile中。

这种情况发生在Nexus设备上的Android 6.0.1和默认的Google相机应用中。

视频捕获是否真的不支持内容URI?我宁愿不在可公开访问的目录中使用文件URI。

1 个答案:

答案 0 :(得分:4)

您有两个不同的问题:Google相机应用的行为以及整个Android生态系统的行为。

对于Google相机应用,我们将其报告为a bug with respect to Android N,因为您只能使用content Uri(如果您的targetSdkVersionN或更高)。它应该在即将发布的版本中修复。

话虽如此,如果其他相机应用遇到content Uri值的问题,我也不会感到惊讶。这是我对Android N effectively banning the file scheme所关注的问题之一,因为我们将遇到filecontent都不可靠的情况,而且我们没有很好的方法来检测这些案例