我在 android.media.MediaRecorder
类的帮助下录制视频,它接受输出文件的路径字符串 ( MediaRecorder.setOutputFile(String)
),尽管该方法的一个版本接受 文件描述符
。
我需要存储巨大的视频文件,所以我想使用 SD 卡。为了获取相关目录的路径,我使用了 Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_DCIM)
。事实证明,生成的路径用于“模拟”存储(/sdcard/...
)而不是真正的 SD 卡(/sdcard1/
在我的 Xperia Z3 Compact,Android 5.1 上.1).
我尝试对 /sdcard1/
(以及 /storage/sdcard1
)进行硬编码,但得到一个关于权限拒绝的 IOException
。当然,我有
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
我听说 4.4(又名存储访问框架)之后对 SD 卡的访问发生了巨大变化,但找不到足够简单明了的解释来说明如何在这种情况下完成工作。对此的简短解决方案有帮助吗?
具有硬编码路径的 PS 解决方案对我来说是可以的,因为我将只在我的手机上使用这个应用程序。
最佳答案
此代码应该可以解决您的问题:
public String createVideoFilePath() {
String time = new SimpleDateFormat("yyyyMMdd_HHmmss").format(new Date());
File[] pathsArray = getExternalFilesDirs(Environment.DIRECTORY_DCIM);
/通常,pathArray[1] 包含路径 可移动 SD 上的必要文件夹 卡片。所以我们通常可以只使用 pathArray[1] 而不是用 for 语句在 pathArray 中搜索必要的文件/
for (File f : pathsArray) {
if ((f != null) && (Environment.isExternalStorageRemovable(f))) {
return f.getPath() + File.separator +"video_"+ time + ".mp4";
}
}
return pathsArray[0].getPath() + File.separator +"video_"+ time + ".mp4";
}
如果可移动 SD 不存在,此方法返回文件在可移动 SD 卡或模拟存储中的位置
只需将此方法用作 MediaRecorder.setOutputFile(String)
的参数
更新:
非常重要的一点是,所有位于文件夹中的文件都是通过 Context 获取的。 getExternalFilesDirs(String typr)
将在卸载您的应用后删除。
关于android - 在 Android 5 中将视频文件存储在 SD 卡上,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35573839/