如何从android中的光标id获取路径

时间:2014-12-23 13:58:24

标签: android path android-cursor

现在我继续选择多个图片和视频我经历了

https://github.com/voidberg/DmxMediaPicker这正是我需要的,但在这里我只得到了类型,id。

下面用于从此处获取ID和类型的代码如何获取所选的特定图像或视频的路径。

 if (type == 0) {
idColumn = cur.getColumnIndex(MediaStore.Video.Media._ID);
bucketColumn = cur.getColumnIndex(MediaStore.Video.Media.BUCKET_DISPLAY_NAME);
dateColumn = cur.getColumnIndex(MediaStore.Video.Media.DATE_ADDED);
}

else {
idColumn = cur.getColumnIndex(MediaStore.Images.Media._ID);
bucketColumn = cur.getColumnIndex(MediaStore.Images.Media.BUCKET_DISPLAY_NAME);
dateColumn = cur.getColumnIndex(MediaStore.Images.Media.DATE_ADDED);
}

通过以下自定义尝试了很多但没有用:

int id = cur.getInt(idColumn);

我尝试从 id 获取特定图片或视频的路径,但没有变化。

如果有人对此有所了解,请帮助解决此问题。

1 个答案:

答案 0 :(得分:0)

这里要小心。您不能假设媒体项必然对应于设备上的文件。例如,您可以选择Google+图片或视频。

在这些情况下,MediaStore.Images.Media.DATA的内容将为空。

这样做的正确方法不是考虑文件,而是考虑Uris和流。特别是,通过媒体项Uri,您可以使用ContentResolver获取包含其内容的InputStream

看看这个例子(取自this answer,图片):

InputStream inputStream = null;
if (ContentResolver.SCHEME_CONTENT.equals(mediaUri.getScheme())) {
    inputStream = context.getContentResolver().openInputStream(mediaUri);
} else if (ContentResolver.SCHEME_FILE.equals(mediaUri.getScheme())) {
    inputStream = new FileInputStream(mediaUri.getPath());
}

Bitmap bitmap = BitmapFactory.decodeStream(inputStream);