【发布时间】:2014-06-10 15:31:37
【问题描述】:
我正在尝试将视频插入MediaStore,就像使用此方法可以存储图像一样:
MediaStore.Images.Media.insertImage(getContentResolver(), imagePath, null, null)
由于MediaStore.Video.Media上没有类似的方法,所以我尝试在MediaStore.Video.Media.EXTERNAL_CONTENT_URI中插入一条记录,然后将文件复制到目的地,如下所示:
ContentValues values = new ContentValues();
values.put(MediaStore.Video.Media.TITLE, "Title1");
values.put(MediaStore.Video.Media.MIME_TYPE, "video/mp4");
values.put(MediaStore.Video.Media.DATA, videoPath);
Uri uri = cr.insert(MediaStore.Video.Media.EXTERNAL_CONTENT_URI, values);
try {
OutputStream os = cr.openOutputStream(uri);
...
...
} (FileNotFoundException e) {
cr.delete(uri, null, null);
}
返回的uri 是non-null,形式为content://media/external/video/media/{id},看起来是正确的。
但是当cr.openOutputStream(uri);被执行时,FileNotFoundException被抛出。
最后一点类似于 Images.Media.insertImage 查看其源代码所做的。
顺便说一句,我确实有WRITE_EXTERNAL_STORAGE 权限。另外,我正在测试 4.3 和 4.4。
【问题讨论】:
-
我的 Nexus 5 和 4.4.4 也有同样的问题。
-
任何解决方案的人?
-
你找到解决办法了吗?
-
有人解决了吗?
-
遗憾的是,我一直无法使用 MediaStore 在图库中保存视频。我找到的唯一解决方案是通过流进行经典文件保存,然后使用 MediaScanner 意图扫描输出文件,因此将其添加到手机的图库中。如果你不想绝对使用 MediaStore,我可以发布我的解决方案(使用 Xamarin/C#,但代码几乎相同,只是语法和缩进发生了变化),但如果你真的想使用 MediaStore,它赢了'不回答你的问题..
标签: android video android-contentresolver mediastore