【问题标题】:How to get imagepath from thumbnail path of a image?如何从图像的缩略图路径中获取图像路径?
【发布时间】:2013-03-21 13:27:22
【问题描述】:

我正在尝试根据缩略图路径获取图像路径,我已经尝试过解决方案 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;
    }

上面的方法做了一些修改以适应我的需要,它在 Toasting 时没有返回任何内容,请告诉如何使用缩略图路径检索图像路径?

【问题讨论】:

    标签: android


    【解决方案1】:

    经过长时间的不懈尝试,解决方案就在这里

    1. 需要从缩略图表中的images表中找到image id,即image unique id,不明白的可以向缩略图提供者(MediaStore.Images.Thumbnails.EXTERNAL_CONTENT_URI)查询,参考@987654322 @ ,特别是IMAGE_ID

    第一步是获取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;
        }
    

    如果您仍有疑问或错误/异常,请发表评论!

    【讨论】:

    • “EXTERNAL_CONTENT_URI”到底是做什么用的?是否适用于所有应用程序都可用的内容,因此它们不需要权限?此外,给定来自您应用程序外部的 uri(通过意图),您如何知道它的来源(发送它的应用程序),以及它是否有任何额外信息(花费的时间等...)?跨度>
    • 我正在获取路径,但它的图像不同。
    • @calvin:你传递的是什么身份?你确定它是不同的图像吗?如果它太长,请随时根据它提出另一个问题。
    • @AkhilJain 我在以下地址发布了问题:stackoverflow.com/questions/29839329/…
    • @AkhilJain:它在棒棒糖中完美运行。但不是在 4.1.2 :(
    猜你喜欢
    • 1970-01-01
    • 2012-03-05
    • 2013-01-01
    • 2013-08-13
    • 2017-03-10
    • 2012-12-02
    • 1970-01-01
    • 1970-01-01
    • 2017-03-30
    相关资源
    最近更新 更多