java - Android将录像机视频保存到外部存储
问题描述
我需要在特定位置录制和保存视频(getExternalFilesDir(Environment.DIRECTORY_MOVIES)),然后在 videoview 中显示,
我现在的代码:
buttonSR.setOnClickListener(new View.OnClickListener(){
@Override
public void onClick(View v) {
Intent intent = new Intent(MediaStore.ACTION_VIDEO_CAPTURE);
launchRecordVideoActivity.launch(intent);
}
});
ActivityResultLauncher<Intent> launchRecordVideoActivity= registerForActivityResult(
new ActivityResultContracts.StartActivityForResult(),
new ActivityResultCallback<ActivityResult>() {
@Override
public void onActivityResult(ActivityResult result) {
if (result.getResultCode() == Activity.RESULT_OK) {
Intent data = result.getData();
Uri videoUri = data.getData();
videoView.setVideoURI(videoUri);
videoView.start();
}
}
});
那是我现在的代码,但是它将文件保存到画廊。我试着这样做:
buttonSR.setOnClickListener(new View.OnClickListener(){
@Override
public void onClick(View v) {
Intent intent = new Intent(MediaStore.ACTION_VIDEO_CAPTURE);
File storageDir = getExternalFilesDir(Environment.DIRECTORY_MOVIES);
String timeStamp = new SimpleDateFormat("yyyyMMdd_HHmmss").format(new Date());
String strFileName = "MP4_" + timeStamp +"_";
File fileUri;
try {
fileUri = File.createTempFile(strFileName,".mp4",storageDir);
filmpath=storageDir+strFileName+".mp4";
intent.putExtra(MediaStore.EXTRA_OUTPUT,fileUri);
startActivityForResult(intent, REQUEST_VIDEO_CAPTURE);
} catch (IOException e) {
e.printStackTrace();
}
launchRecordVideoActivity.launch(intent);
}
});
}
但是代码只在 getExternalFilesDir(Environment.DIRECTORY_MOVIES) 目录中创建了额外的 EMPTY 0KB 文件,该文件是空的,所以我看不到视频。我的第二个版本的 buttonSR onclick 是否缺少某些内容,或者是否有不同的方式来做我需要做的事情?
解决方案
推荐阅读
- javascript - 将 onmount json 传递给变量
- xcode - 导航控制器的视图控制器按钮将我带到全新的窗口,而不是下一页。为什么会这样?
- javascript - 所有迭代完成后如何获得计数?
- yaml - 如何使用 shell 脚本将新配置文件附加到 configtx.yaml 文件?
- c++ - 使命名空间内联时,使用 using 指令进行限定名称查找的不同行为
- javascript - 如何构建访问外部变量的函数对象?
- sql - 在没有子查询的情况下连接具有不同 ID 的同一列的多个值 - SQL Server
- python - 如何从训练数据列表和预期结果中创建张量流数据库,以及如何构造独特的网络形状
- python - Tensorflow:此处无法访问:它在另一个函数或代码块中定义
- javascript - 我将如何在 Angular 中实现平移和缩放?