一个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 value
- index = 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;
- }
- }
- }
- }
一个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 value
- index = 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;
- }
- }
- }
- }