2013-03-21 276 views
2

我想獲得基於縮略圖路徑的圖像路徑,我已經嘗試了 android-getting-path-to-image-from-thumbnail的解決方案,但它基於gridview位置,我只是檢索特定的圖像。此外,我找到了一個示例代碼SO,代碼如何從圖像的縮略圖路徑獲取圖像路徑?

private String getImagePathFromThumbPath(String thumbPath) 
    { 
     String imgPath=null; 

//  String[] projection = new String[] {MediaStore.Images.Thumbnails._ID, MediaStore.Images.Thumbnails.IMAGE_ID}; 
     String[] imagesDataPath={ MediaStore.Images.Media.DATA ,MediaStore.Images.Media._ID}; 
      //mResolver.query() requires android API 16 
     Cursor thumbnails = mResolver.query(MediaStore.Images.Thumbnails.EXTERNAL_CONTENT_URI, imagesDataPath,MediaStore.Images.Thumbnails.DATA+"=?",new String[]{thumbPath}, null, null); 

     String[] filePathColumn = {MediaStore.Images.Media.DATA}; 

     Cursor imageCursor = mResolver.query(MediaStore.Images.Media.EXTERNAL_CONTENT_URI, filePathColumn, MediaStore.Images.Media._ID + "=?", new String[] {thumbId}, null); 

     if (imageCursor != null && imageCursor.moveToFirst()) { 
      // Your file-path will be here 
      imgPath= imageCursor.getString(imageCursor.getColumnIndex(filePathColumn[0])); 
     } 
     return imgPath; 
    } 

地,上述方法有點修改,以適合我的需要,它在祝酒沒有返回,請告知如何使用縮略圖路徑檢索的ImagePath?

回答

6

經過漫長的時間和不懈的嘗試,解決的辦法是在這裏

你需要找到的圖片ID是從圖像表圖像唯一ID在縮略圖表,查詢到縮略圖提供商(MediaStore.Images.Thumbnails.EXTERNAL_CONTENT_URI)如果你不明白它,請參閱here,特別是IMAGE_ID

步驟1是讓reterievedImageId

reterievedImageId=Long.parseLong(cursor.getString(imageIdInImages)); 

2.現在使用reterievedImageId得到圖片的路徑,再次quering內容提供商,只是這一次查詢的圖像媒體提供商(MediaStore.Images.Media.EXTERNAL_CONTENT_URI

String getImagePathFromThumbPath(String thumbPath) 
    { 
     String imagePath=null; 
     if(thumbPath!=null) 
     { 
      String[] columns_to_return ={MediaStore.Images.Thumbnails.IMAGE_ID}; 
      String where =MediaStore.Images.Thumbnails.DATA+" LIKE ?"; 
      long reterievedImageId=-1; 
      String valuesAre[]={"%"+thumbPath}; 
      Cursor cursor = getContentResolver().query(MediaStore.Images.Thumbnails.EXTERNAL_CONTENT_URI, columns_to_return, where, valuesAre, null); 
      if(cursor!=null) 
      {   
       int imageIdInImages=cursor.getColumnIndex(MediaStore.Images.Thumbnails.IMAGE_ID); 

       for (cursor.moveToFirst();!cursor.isAfterLast(); cursor.moveToNext()) 
       { 
         //STEP 1 to retrieve image ID 
        reterievedImageId=Long.parseLong(cursor.getString(imageIdInImages)); 
       } 
       if(reterievedImageId!=-1) 
       { 
         //STEP 2 Now 
        Log.i(TAG, "imageId-"+reterievedImageId); 
        String[] columnsReturn={MediaStore.Images.Media.DATA}; 
        String whereimageId=MediaStore.Images.Media._ID+" LIKE ?"; 
        String valuesIs[]={"%"+reterievedImageId}; 
        Cursor mCursor = getContentResolver().query(MediaStore.Images.Media.EXTERNAL_CONTENT_URI, columnsReturn, whereimageId, valuesIs, null); 
        int rawDataPath= mCursor.getColumnIndex(MediaStore.Images.Media.DATA); 
        for (mCursor.moveToFirst();!mCursor.isAfterLast(); mCursor.moveToNext()) 
        { 
         imagePath=mCursor.getString(rawDataPath); 
        } 
       } 
      } 
     } 
     return imagePath; 
    } 

如果您仍然有懷疑或錯誤/異常,請留言!

+0

「EXTERNAL_CONTENT_URI」的用途是什麼?是否適用於所有應用程序的內容,因此他們不需要權限?此外,從你的應用程序之外(通過意圖)給出一個uri,你怎麼知道它的來源(發送它的應用程序),以及它是否有任何額外的信息(所花費的時間等)? – 2014-10-28 12:33:48

+0

我得到的路徑,但它的不同的形象。 – Calvin 2015-04-23 13:16:06

+0

@calvin:你傳遞了什麼ID?你確定它有不同的形象嗎?如果時間太長,請隨時提出另一個問題。 – 2015-04-23 13:35:10