我正在尝试将视频插入到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是content://media/external/video/media/{id}形式的non-null,这似乎是正确的。
但是当cr.openOutputStream(uri);被执行时,就会抛出一个FileNotFoundException。
最后一点类似于Images.Media.insertImage查看其源代码时所做的事情。
顺便说一句,我确实有WRITE_EXTERNAL_STORAGE权限。另外,我正在4.3和4.4上测试。
发布于 2016-09-20 17:06:53
你从这段代码中得到了什么:
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);是一个公共Uri。关于is的更多信息可以在here中找到,在那里您可以看到,从API19 (KitKat)开始,对Media的访问发生了变化。
通过查看安卓的源代码,你可以看到一个database video schema and columns。VideoColumns从MediaColumns扩展而来,它包含以下列:
MediaStore.MediaColumns.DATA描述为:
因此,您必须从公共Uri获取真正的Uri。
为了实现这一点,运行代码:
getDataColumn(context, uri, null, null);其中uri是您的公共Uri,函数getDataColumn如下所示:
public static String getDataColumn(Context context, Uri uri, String selection,
String[] selectionArgs) {
Cursor cursor = null;
final String column = MediaStore.MediaColumns.DATA;
final String[] projection = {
column
};
try {
cursor = context.getContentResolver().query(uri, projection, selection, selectionArgs,
null);
if (cursor != null && cursor.moveToFirst()) {
final int column_index = cursor.getColumnIndexOrThrow(column);
return cursor.getString(column_index);
}
} finally {
if (cursor != null)
cursor.close();
}
return null;
}此代码来自aFileChooser和函数getPath
https://stackoverflow.com/questions/24145036
复制相似问题