嗨,我一直在尝试使用意图从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()) {
}
}
}
上述代码适用于所有牛轧糖前版本。谁能为我提供一个更好的解决方案来录制视频并保存在设备存储中。
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();
}
}
这里是解决方案!
如果您的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