android图片文件的路径地址与Uri的相互转换

DanU50 8年前

来自: http://www.jcodecraeer.com//a/anzhuokaifa/androidkaifa/2014/0821/1660.html


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