解决从相册获取图片路径cursor = getContentResolver().query(uri, proj, null, null, null)报空的问题

uri不空但cursor = getContentResolver().query(uri, proj, null, null, null)报空 主要是因为android4.4版本前后的uri形式不同




可以使用以下方法来获取图片路径:


工具类下载地址:http://download.csdn.net/detail/a458339341/9769614


public static String getImageAbsolutePath(Activity context, Uri imageUri) {  
    if (context == null || imageUri == null)  
        return null;  
    if (android.os.Build.VERSION.SDK_INT >= android.os.Build.VERSION_CODES.KITKAT && DocumentsContract.isDocumentUri(context, imageUri)) {  
        if (isExternalStorageDocument(imageUri)) {  
            String docId = DocumentsContract.getDocumentId(imageUri);  
            String[] split = docId.split(":");  
            String type = split[0];  
            if ("primary".equalsIgnoreCase(type)) {  
                return Environment.getExternalStorageDirectory() + "/" + split[1];  
            }  
        } else if (isDownloadsDocument(imageUri)) {  
            String id = DocumentsContract.getDocumentId(imageUri);  
            Uri contentUri = ContentUris.withAppendedId(Uri.parse("content://downloads/public_downloads"), Long.valueOf(id));  
            return getDataColumn(context, contentUri, null, null);  
        } else if (isMediaDocument(imageUri)) {  
            String docId = DocumentsContract.getDocumentId(imageUri);  
            String[] split = docId.split(":");  
            String type = split[0];  
            Uri contentUri = null;  
            if ("image".equals(type)) {  
                contentUri = MediaStore.Images.Media.EXTERNAL_CONTENT_URI;  
            } else if ("video".equals(type)) {  
                contentUri = MediaStore.Video.Media.EXTERNAL_CONTENT_URI;  
            } else if ("audio".equals(type)) {  
                contentUri = MediaStore.Audio.Media.EXTERNAL_CONTENT_URI;  
            }  
            String selection = MediaStore.Images.Media._ID + "=?";  
            String[] selectionArgs = new String[] { split[1] };  
            return getDataColumn(context, contentUri, selection, selectionArgs);  
        }  
    } // MediaStore (and general)  
    else if ("content".equalsIgnoreCase(imageUri.getScheme())) {  
        // Return the remote address  
        if (isGooglePhotosUri(imageUri))  
            return imageUri.getLastPathSegment();  
        return getDataColumn(context, imageUri, null, null);  
    }  
    // File  
    else if ("file".equalsIgnoreCase(imageUri.getScheme())) {  
        return imageUri.getPath();  
    }  
    return null;  
}  
  
public static String getDataColumn(Context context, Uri uri, String selection, String[] selectionArgs) {  
    Cursor cursor = null;  
    String column = MediaStore.Images.Media.DATA;  
    String[] projection = { column };  
    try {  
        cursor = context.getContentResolver().query(uri, projection, selection, selectionArgs, null);  
        if (cursor != null && cursor.moveToFirst()) {  
            int index = cursor.getColumnIndexOrThrow(column);  
            return cursor.getString(index);  
        }  
    } finally {  
        if (cursor != null)  
            cursor.close();  
    }  
    return null;  
}  
  
/** 
 * @param uri The Uri to check. 
 * @return Whether the Uri authority is ExternalStorageProvider. 
 */  
public static boolean isExternalStorageDocument(Uri uri) {  
    return "com.android.externalstorage.documents".equals(uri.getAuthority());  
}  
  
/** 
 * @param uri The Uri to check. 
 * @return Whether the Uri authority is DownloadsProvider. 
 */  
public static boolean isDownloadsDocument(Uri uri) {  
    return "com.android.providers.downloads.documents".equals(uri.getAuthority());  
}  
  
/** 
 * @param uri The Uri to check. 
 * @return Whether the Uri authority is MediaProvider. 
 */  
public static boolean isMediaDocument(Uri uri) {  
    return "com.android.providers.media.documents".equals(uri.getAuthority());  
}  
  
/** 
 * @param uri The Uri to check. 
 * @return Whether the Uri authority is Google Photos. 
 */  
public static boolean isGooglePhotosUri(Uri uri) {  
    return "com.google.android.apps.photos.content".equals(uri.getAuthority());  
}  




评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值