2012-06-22 3 views
5

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

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

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

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

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

EDIT:

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

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

Чтобы правильно обрабатывать извлечение изображения из галереи вам нужно обрабатывать три сценария:

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

  2. пользователь выбрал Picasa изображение и устройство работает Версия для Android до версии 3.0

  3. Пользователь выбрал изображение Picasa и устройство работает под управлением ОС Android версии 3.0 и выше

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

+0

Эта ссылка была невероятно полезна. – Calvin

ответ

5

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

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

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

Как получить файл с пути к Google Go? –

+0

Знаем ли мы, что * есть файл при использовании Google Диска? Я предполагаю, что цель ContentResolver - сделать абстракцию из источников данных. Вам не нужно знать, где находятся данные, или как их получить. Может быть файл. Могут быть данные с Google Диска. Тебе все равно. –