android - 在 Android 5 中将视频文件存储在 SD 卡上

标签 android android-5.0-lollipop android-sdcard android-5.1.1-lollipop sony-xperia

我在 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/

相关文章:

android - 如何在 Lollipop 之前的 Android 版本中更改工具栏的标题颜色

android - 从SD卡读取文件时放在哪里(Android开发)

java - 从文件在 SD 卡上创建数据库

android - 是否有用于自定义可重用 View 的库?

android - 我必须调整从 listView 中使用的服务器下载的图像的大小吗?

android - 如何在仅在特定 fragment 上可见的 ViewPage 操作栏上添加导航列表?

android - android webview 版本取决于 sdk 还是设备?

java - 使用新元素即时更新 Android SurfaceView

android - AudioTrack 在 Android 5.0 上停止工作

android - 将文件从 SD 卡的文件夹复制到 SD 卡的另一个文件夹