android नए Google फ़ोटो ऐप का उपयोग करके फोटो चुनना टूटा हुआ है




android-intent android-gallery (2)

नवीनतम Google फ़ोटो पर सामग्री यूआरआई प्राप्त करने के लिए कोड नीचे मेरे लिए काम कर रहा है। मैंने जो कोशिश की है वह temp फ़ाइल को लिख रहा है और अस्थायी छवि यूआरआई वापस कर रहा है, अगर उसके पास सामग्री यूआरआई में अधिकार है।

आप कोशिश कर सकते हैं:

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

मेरे ऐप में लाइब्रेरी से फोटो चुनने की क्षमता है। वास्तव में मैं इस चयन से फ़ाइल पथ चाहता हूं।

फोटो चुनने के इरादे को बनाने के लिए यह कोड है:

    Intent photoPickerIntent = new Intent(Intent.ACTION_PICK,
        MediaStore.Images.Media.EXTERNAL_CONTENT_URI);
    photoPickerIntent.setType("image/*");
    startActivityForResult(photoPickerIntent, INTENT_REQUEST_CODE_SELECT_PHOTO);

यह वह कोड है जो यूआरआई से फ़ाइल पथ प्राप्त करता है:

    Cursor cursor = null;
    String path = null;
    try {
        String[] projection = { MediaStore.Images.Media.DATA };
        cursor = context.getContentResolver().query(contentUri, projection, null, null, null);
        int columnIndex = cursor.getColumnIndexOrThrow(projection[0]);
        cursor.moveToFirst();
        path = cursor.getString(columnIndex);
    } finally {
        if (cursor != null) {
            cursor.close();
        }
    }
    return path;

Google फ़ोटो ऐप के कल के अपडेट से पहले सबकुछ ठीक से काम करता था। यूआरआई पार्सिंग के बाद अब path शून्य है।

यूआरआई इस तरह के समान है: content://com.google.android.apps.photos.contentprovider/0/1/content%3A%2F%2Fmedia%2Fexternal%2Fimages%2Fmedia%2F75209/ACTUAL

मैंने इरादे के साथ इरादा बनाने की भी कोशिश की .ACTION_GET_CONTENT कार्रवाई - कोई भाग्य नहीं।


यह निश्चित रूप से एक कामकाज है, लेकिन आप असली सामग्री यूआरआई निकाल सकते हैं जो स्पष्ट रूप से कुछ कारणों से एम्बेडेड हो गया है: content%3A%2F%2Fmedia%2Fexternal%2Fimages%2Fmedia%2F75209

मैं authority=media and path=external/images/media/xxx साथ एक नया यूआरआई बनाने में सक्षम था, और सामग्री रिज़ॉल्वर ने एक वास्तविक यूआरएल वापस कर दिया।

उदाहरण कोड:

String unusablePath = contentUri.getPath();
int startIndex = unusablePath.indexOf("external/");
int endIndex = unusablePath.indexOf("/ACTUAL");
String embeddedPath = unusablePath.substring(startIndex, endIndex);

Uri.Builder builder = contentUri.buildUpon();
builder.path(embeddedPath);
builder.authority("media");
Uri newUri = builder.build();




google-photos