android圖片檔案的路徑地址與Uri的相互轉換

來源:互聯網
上載者:User

標籤:ringbuf   檔案   column   android   nbsp   val   get   ==   media   

一個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的相互轉換

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.