GetRealPathFromURI() не работает с изображениями на основе ICS и Picasa

Я пытаюсь получить локальный путь изображения, чтобы загрузить его на сервер. При использовании pre ICS он получит стандартный путь в устройстве Android через getRealPathFromURI(theURI)

Однако с ICS URI будет содержать uriString как-то вроде: content://com.google.android.gallery3d.provider/picasa/item/12312312312312.

и работает getRealPathFromURI(theURI) возвращает null

Нужно ли сейчас извлекать вышеуказанные uriString и вручную загружать изображение через API (если я обнаруживаю, что это изображение галереи Picasa), а не локально сохранено? или я вообще что-то пропустил?

спасибо за любой совет

EDIT:

Кажется, я искал неправильный вопрос...

нашел проблему в приведенной ниже ссылке... это в значительной степени то, что я ожидал, что мне нужно будет сделать. Довольно раздражающий google/android не справился с этим более элегантно.

Чтобы правильно обрабатывать выборку из галереи, вам необходимо обрабатывать три сценария:

  • Пользователь выбрал локальный файл изображения

  • Пользователь выбрал образ Picasa, и на устройстве установлена ​​версия Android до версии 3.0

  • Пользователь выбрал изображение Picasa и на устройстве работает Android версии 3.0 и выше

http://dimitar.me/how-to-get-picasa-images-using-the-image-picker-on-android-devices-running-any-os-version/

Ответ 1

То, что я узнал на устройстве под управлением Android 4.0 +.

В качестве примера ICRI URI вы указываете URI с контентом content://, поэтому для этого должен быть ответственный ContentProvider. Следовательно, каково использование этих трюков getRealPathFromURI()? Просто разрешите ContentResolver выполнять эту работу для вас:

InputStream inStream = getContentResolver().openInputStream(theUri);
Bitmap bitmap = BitmapFactory.decodeStream(is);