-
-
Save alexzaitsev/75c9b36dfcffd545c676 to your computer and use it in GitHub Desktop.
if (isNewGooglePhotosUri(uri)) { | |
String pathUri = uri.getPath(); | |
String newUri = pathUri.substring(pathUri.indexOf("content"), pathUri.lastIndexOf("/ACTUAL")); | |
return getDataColumn(context, Uri.parse(newUri), null, null); | |
} | |
public static boolean isNewGooglePhotosUri(Uri uri) { | |
return "com.google.android.apps.photos.contentprovider".equals(uri.getAuthority()); | |
} | |
public static String getDataColumn(Context context, Uri uri, String selection, String[] selectionArgs) { | |
Cursor cursor = null; | |
final String column = "_data"; | |
final String[] projection = { | |
column | |
}; | |
try { | |
cursor = context.getContentResolver().query(uri, projection, selection, selectionArgs, null); | |
if (cursor != null && cursor.moveToFirst()) { | |
final int index = cursor.getColumnIndexOrThrow(column); | |
return cursor.getString(index); | |
} | |
} finally { | |
if (cursor != null) { | |
cursor.close(); | |
} | |
} | |
return null; | |
} |
then how do u know if its image or video to save I to a file ? I mean the extension?
I am doing deeplinking in my app. So I've opened google photos and by tap on share icon, opening my app and sending image path. I am getting following path in intent:
content://com.google.android.apps.photos.contentprovider/0/1/mediakey:/local%253A02ae48d5-e576-449b-994f-1db260da79c0/REQUIRE_ORIGINAL/NONE/2022132799
When I have tried your code its crashing and not getting actual path to download image. Please tell me what I am doing wrong.
@anurags2102 : I was also receiving the path like this :
content://com.google.android.apps.photos.contentprovider/0/2/mediakey%3A%2Flocal%253A6a6204a4-2693-45f1-830f-dd7a8a945f00/REQUIRE_ORIGINAL/NONE/2116805895
In this case we get null path using above getDataColumn()
method so I just checked for null there and used this solution for copying file.
Try this one https://stackoverflow.com/a/50253933/8515192
@arindamxd your suggestion helped, was trying to solve it for a day, thanks :)
@Parag2385 welcome :)
I worked around this by consuming the input stream
getContentResolver().openInputStream(uri)
to a null output stream like:using guava
it's not perfect but better than writing a tempfile.