700字范文,内容丰富有趣,生活中的好帮手!
700字范文 > Android 读取拍照或相册uri 转换成图片的绝对路径

Android 读取拍照或相册uri 转换成图片的绝对路径

时间:2021-08-17 21:31:17

相关推荐

Android 读取拍照或相册uri 转换成图片的绝对路径

一个android文件的Uri地址一般如下:

content://media/external/images/media/62026

这是一张图片的Uri,那么我们如何根据这个Uri获得其在文件系统中的路径呢?

其实很简单,直接上代码:

/*** Try to return the absolute file path from the given Uri** @param context* @param uri* @return the file path or null*/public static String getRealFilePath( final Context context, final Uri uri ) {if ( null == uri ) return null;final String scheme = uri.getScheme();String data = null;if ( scheme == null )data = uri.getPath();else if ( ContentResolver.SCHEME_FILE.equals( scheme ) ) {data = uri.getPath();} else if ( ContentResolver.SCHEME_CONTENT.equals( scheme ) ) {Cursor cursor = context.getContentResolver().query( uri, new String[] { ImageColumns.DATA }, null, null, null );if ( null != cursor ) {if ( cursor.moveToFirst() ) {int index = cursor.getColumnIndex( ImageColumns.DATA );if ( index > -1 ) {data = cursor.getString( index );}}cursor.close();}}return data;}

那么假如我们有一个图片的路径地址又该如何获得其Uri呢?

String type = Utils.ensureNotNull(intent.getType());Log.d(TAG, "uri is " + uri);if (uri.getScheme().equals("file") && (type.contains("image/"))) {String path = uri.getEncodedPath();Log.d(TAG, "path1 is " + path);if (path != null) {path = Uri.decode(path);Log.d(TAG, "path2 is " + path);ContentResolver cr = this.getContentResolver();StringBuffer buff = new StringBuffer();buff.append("(").append(Images.ImageColumns.DATA).append("=").append("'" + path + "'").append(")");Cursor cur = cr.query(Images.Media.EXTERNAL_CONTENT_URI,new String[] { Images.ImageColumns._ID },buff.toString(), null, null);int index = 0;for (cur.moveToFirst(); !cur.isAfterLast(); cur.moveToNext()) {index = cur.getColumnIndex(Images.ImageColumns._ID);// set _id valueindex = cur.getInt(index);}if (index == 0) {//do nothing} else {Uri uri_temp = Uri.parse("content://media/external/images/media/"+ index);Log.d(TAG, "uri_temp is " + uri_temp);if (uri_temp != null) {uri = uri_temp;}}}}

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。