I'm trying to get the local path of a image in order to upload it to a server. When using pre ICS it would get a standard path within the android device via getRealPathFromURI(theURI)
However with ICS URI will contain a uriString
as something like : content://com.google.android.gallery3d.provider/picasa/item/12312312312312
.
and running getRealPathFromURI(theURI)
returns null
Do I now need to extract the above uriString
and manually download the image via the API (if i detect that its a Picasa gallery image) rather than one locally stored? or am I completely missing something?
thanks for any advice
EDIT:
seems i was searching on the wrong question...
found the problem in the below link... which is pretty much what I expected I'd need to do. Pretty annoying google/android didn't handle this more elegantly.
To properly handle fetching an image from the Gallery you need to handle three scenarios:
The user selected a local image file
The user selected a Picasa image and the device is running Android version prior to 3.0
The user selected a Picasa image and the device is running Android version 3.0 and higher
That's what I found out on device running Android 4.0+.
The ICS URI you gave as an example is an URI with content:// scheme, so there should be a ContentProvider responsible for that. Hence, what is the use of that tricks getRealPathFromURI() uses? Just let ContentResolver do this work for you:
InputStream inStream = getContentResolver().openInputStream(theUri);
Bitmap bitmap = BitmapFactory.decodeStream(is);