获取图像缩略图Android KitKat新的存储访问框架

时间:2014-05-30 11:16:30

标签: android storage thumbnails android-4.4-kitkat

据我所知,在Android中处理图像的正确方法是将图像Uri存储在数据库中,而不是图像实际路径。 这就是我们如何免费获得缩略图。而且我们不需要自己准备它们并隐藏一些。 下面的代码采用Uri的缩略图。 代码适用于Android 4.4及更低版本。但是要获取图像ID,它不会查询内容提供者。它需要来自Uri本身的ID。问题是:它是一个稳定的解决方案,我能依靠它吗?

@TargetApi(Build.VERSION_CODES.KITKAT)
public static Bitmap getImageThumbnail(Context context, Uri uri){ 
    final ContentResolver resolver = context.getContentResolver();
    long id;
    try {
        if (UIUtils.hasKitKat() && DocumentsContract.isDocumentUri(context, uri)) {
            String wholeID = DocumentsContract.getDocumentId(uri);
            // Split at colon, use second item in the array
            id = Long.parseLong(wholeID.split(":")[1]);
        }
        else if (isMediaUri(uri)){
            id = ContentUris.parseId(uri);
        }
        else return null;
        return MediaStore.Images.Thumbnails.getThumbnail(
                resolver,
                id,
                MediaStore.Images.Thumbnails.MINI_KIND,
                null);
    } 
    catch (Exception e) {
        if (DEBUG) Log.e(TAG, "getThumbnail", e);
        return null;
    }
}
public static boolean isMediaUri(Uri uri) {
    return "media".equalsIgnoreCase(uri.getAuthority());
}

1 个答案:

答案 0 :(得分:2)

你应该使用DocumentsContract.getDocumentThumbnail()。这保证适用于任何文档uri,而不仅仅是内置媒体提供商。