我尝试将视频保存到SD卡。为了测试我的代码,我将所选视频从图库保存到另一个文件夹。
我打电话给画廊意图,并选择一个视频。 onActivityResult函数代码如下:
if(requestCode == VIDEO_PICK) {
if (resultCode == RESULT_OK) {
try {
String path = getRealPathFromURI(data.getData());
Log.i("@@Path ", " " + path);
File file = new File(new URI(path));
Uri uri = addVideo(file);
} catch(Exception err) {
Log.i("@@Exception", " " + err);
}
}
}
public Uri addVideo(File videoFile) {
ContentValues values = new ContentValues();
values.put(MediaStore.Video.Media.TITLE, "My video title");
values.put(MediaStore.Video.Media.MIME_TYPE, "video/mp4");
values.put(MediaStore.Images.Media.DISPLAY_NAME, "player");
values.put(MediaStore.Images.Media.DESCRIPTION, "");
values.put(MediaStore.Images.Media.DATE_ADDED, System.currentTimeMillis());
values.put(MediaStore.Images.Media.DATE_TAKEN, System.currentTimeMillis());
values.put(MediaStore.Video.Media.DATA, videoFile.getAbsolutePath());
return getActivity().getContentResolver().insert(MediaStore.Video.Media.EXTERNAL_CONTENT_URI, values);
}
addVideo函数抛出异常。
java.lang.IllegalArgumentException:URI不是绝对的:
如何从uri获得绝对路径?我试过uri.toString()和uri.getPath()。他们没有工作。
getRealPathFromUri实现是here
答案 0 :(得分:1)
我应该从uri创建一个文件吗?
如果Uri
方案是file
,那么getPath()
将是指向该文件的文件系统路径,并且可能您可以阅读它。
如果Uri
方案是content
,则getPath()
是无意义的字符串。理想情况下,您只需使用Uri
本身,或使用ContentResolver
和openInputStream()
获取InputStream
标识的内容Uri
。如果出于某种原因,您绝对需要一个文件,请使用InputStream
将内容的字节复制到您控制的某个文件中。