Download image from new Google+ (plus) Photos Application

后端 未结 3 991
独厮守ぢ
独厮守ぢ 2020-12-09 08:06

Recently Google added the Photos app for Google+ (plus) and it shows up when you launch an Intent to choose an image. However, if I select an image from Google+ Photos and t

相关标签:
3条回答
  • 2020-12-09 08:35

    I did faced issues selecting images from new Google Photos app. I was able to resolve it by below code.

    It works for me, basically what i did is i am checking if there is any authority is there or not in content URI. If it is there i am writing to temporary file and returning path of that temporary image. You can skip compression part while writing to temporary image

    public static String getImageUrlWithAuthority(Context context, Uri uri) {
        InputStream is = null;
        if (uri.getAuthority() != null) {
            try {
                is = context.getContentResolver().openInputStream(uri);
                Bitmap bmp = BitmapFactory.decodeStream(is);
                return writeToTempImageAndGetPathUri(context, bmp).toString();
            } catch (FileNotFoundException e) {
                e.printStackTrace();
            }finally {
                try {
                    is.close();
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
        }
        return null;
    }
    
    public static Uri writeToTempImageAndGetPathUri(Context inContext, Bitmap inImage) {
        ByteArrayOutputStream bytes = new ByteArrayOutputStream();
        inImage.compress(Bitmap.CompressFormat.JPEG, 100, bytes);
        String path = MediaStore.Images.Media.insertImage(inContext.getContentResolver(), inImage, "Title", null);
        return Uri.parse(path);
    }
    

    P.S. : I have answered a similar question here

    0 讨论(0)
  • 2020-12-09 08:44

    You have to use projection in order to get ImageColumns.DATA (or MediaColumns.DATA):

    private String getRealPathFromURI(Uri contentURI) {
        // Projection makes ContentResolver to get needed columns only 
        String[] medData = { MediaStore.Images.Media.DATA };
        Cursor cursor = getContentResolver().query(contentURI, medData, null, null, null);
    
        // this is how you can simply get Bitmap
        Bitmap bmp = MediaStore.Images.Media.getBitmap(getContentResolver(), contentURI);
    
        // After using projection cursor will have needed DATA column
        cursor.moveToFirst();
        final int idx = cursor.getColumnIndex(MediaStore.Images.ImageColumns.DATA); 
    
        return cursor.getString(idx);
    }
    
    0 讨论(0)
  • 2020-12-09 08:52

    When receiving the data intent, you should use the contentResolver to get the photos. Here's what you should do:

    String url = intent.getData().toString();
    Bitmap bitmap = null;
    InputStream is = null;
    if (url.startsWith("content://com.google.android.apps.photos.content")){
           is = getContentResolver().openInputStream(Uri.parse(url));
           bitmap = BitmapFactory.decodeStream(is);
    }
    
    0 讨论(0)
提交回复
热议问题