3

サムネイル パスに基づいてイメージパスを取得しようとしています。既に android-getting-path-to-image-from-thumbnail のソリューションを試しましたが、グリッドビューの位置に基づいており、特定の画像のみを取得しています。また、SOからサンプルコードを1つ見つけました。コードは

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

上記の方法は私のニーズに合わせて少し変更されており、Toasting では何も返されません。サムネイル パスを使用してイメージパスを取得する方法を教えてください。

4

1 に答える 1

6

長い時間と執拗な試行錯誤の末、解決策はここにあります

1.サムネイル テーブルの画像テーブルから画像の一意の ID である画像 ID を見つける必要があります。サムネイル プロバイダー ( MediaStore.Images.Thumbnails.EXTERNAL_CONTENT_URI )にクエリを実行します

ステップ 1は を取得することretrievedImageIdです。

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

2.イメージ パスの取得を使用してretrievedImageId、コンテンツ プロバイダーに再度クエリを実行し、今回はイメージ メディア プロバイダー ( 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 retrievedImageId = -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
                   retrievedImageId = Long.parseLong(cursor.getString(imageIdInImages));
                }

                if(retrievedImageId != -1)
                {
                    // STEP 2 Now
                    Log.i(TAG, "imageId-" + retrievedImageId);
                    String[] columnsReturn = {MediaStore.Images.Media.DATA};
                    String whereimageId = MediaStore.Images.Media._ID+" LIKE ?";
                    String valuesIs[] = {"%" + retrievedImageId};
                    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;
    }

それでも疑問やエラー/例外がある場合は、コメントを残してください!

于 2013-04-11T17:06:51.417 に答える