我正在按照 Android 开发人员指南中的代码示例从我的应用程序中捕获视频。在我在实例上调用该prepare
方法之前,一切都很顺利。MediaRecorder
它会抛出IOException
以下消息:
java.io.FileNotFoundException: /file:/storage/emulated/0/Pictures/MyApp/MyVideoFile.mp4:
open failed: ENOENT (No such file or directory)
代码与网站上的代码几乎相同。总而言之,有:
CameraActivity
用于管理 Camera 和 MediaRecorder 资源的类。FileManager
返回用于存储视频预览帧的输出文件路径的 Uri 类。
代码片段:
public static File getOutputMediaFile(int type) throws Exception {
if(!Environment.getExternalStorageState().equals(Environment.MEDIA_MOUNTED)) {
throw new Exception("Unable to access device SDCard.");
}
File mediaStorageDir = new File(Environment.getExternalStoragePublicDirectory(
Environment.DIRECTORY_PICTURES), "MyApp");
if(! mediaStorageDir.exists()) {
if(! mediaStorageDir.mkdirs()) {
Log.d(CameraActivity.MYAPP, "Failed to create directory.");
}
}
// Create a media file name.
String timeStamp = new SimpleDateFormat("yyyyMMdd_HHmmss").format(new Date());
File mediaFile;
if (type == MEDIA_TYPE_IMAGE){
mediaFile = new File(mediaStorageDir.getPath(),
"MyAudioFile.jpg");
} else if(type == MEDIA_TYPE_VIDEO) {
mediaFile = new File(mediaStorageDir.getPath(),
"MyVideoFile.mp4");
} else {
return null;
}
return mediaFile;
}
作为mediaFile
参数传递给_mediaRecorder.setOutputFile()
方法。但是,当我调用 时_mediaRecorder.prepare()
,它会抛出IOException
.
我已经包含<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
在 AndroidManifest 文件中。
令人惊讶的一点是,如果我省略mediaRecorder.prepare
调用并检查 sdcard 是否存在文件,它就在那里!但是,如果我运行上述代码完成并检查文件夹,则该文件不存在。看来文件正在通过_mediaRecorder.prepare
调用删除!
我对 Android 开发还很陌生,并且已经花了一天多的时间试图弄清楚这一点。任何帮助都将受到极大的重视!