使用getExternalStorageDirectory保存视频时,相机预览为黑色

时间:2015-11-10 11:06:12

标签: android android-camera

我使用camera2 API和Google sample code来抓取视频。

当我尝试将更改输出位置保存在sdcard/MyApp/filename而不是Android/data/my_package/filename时,我遇到了一个问题。

以下是方法:

private File getVideoFile(Context context) {
    // Not working, cause black preview
    return new File(Environment.getExternalStorageDirectory().getPath() +
                                                    "/myApp/", "myVideo.mp4");
    // Working
    return new File(context.getExternalFilesDir(null), "myVideo.mp4");
}

所以,我的问题,为什么要在SD卡上保存视频导致"黑色预览"以及如何将视频保存在SD卡上?

谢谢!

编辑我要求的许可:

<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.RECORD_AUDIO" />
<uses-permission android:name="android.permission.CAMERA"/>

2 个答案:

答案 0 :(得分:0)

要在SD卡(辅助外部存储设备)上保存视频,请使用以下API:getExternalFilesDirs()

此API将分别返回外部存储和辅助外部存储的路径数组。第二条路径是SD卡路径。有些设备也可以有2张SD卡,所以最好检查一下是不是SD卡?#34;&#34; sdcard&#34;返回路径中的关键字。要了解各种存储之间的差异,请查看我的this答案。

答案 1 :(得分:0)

最后我找到了解决方案。

我不知道为什么会这样,但当目标目录不存在时预览为空。

我将视频保存在尚未存在的myApp目录中,这导致预览为空白。

解决方案是首先创建目录,而不是保存视频。代码应该是这样的:

private File getVideoFile(Context context) {
    File folder = new File (Environment.getExternalStorageDirectory().getPath() + "/myApp/");
    folder.mkdirs();
    return new File(Environment.getExternalStorageDirectory().getPath() + "/myApp/", "myVideo.mp4");
}