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