2012-06-22 14 views
5

Estoy tratando de obtener la ruta local de una imagen para subirla a un servidor. Al usar pre ICS obtendría una ruta estándar dentro del dispositivo Android a través de getRealPathFromURI(theURI)getRealPathFromURI() no funciona con imágenes basadas en ICS y Picasa

Sin embargo, con ICS URI contendrá un uriString como algo así como: content://com.google.android.gallery3d.provider/picasa/item/12312312312312.

y corriendo getRealPathFromURI(theURI) vuelve null

hacer ahora necesito para extraer lo anterior uriString y descargar manualmente la imagen a través de la API (si detecto que dé una imagen de la galería de Picasa) en lugar de una almacenada localmente? o me falta algo por completo?

gracias por cualquier consejo

EDIT:

parece yo estaba buscando en la pregunta equivocada ...

encontrado el problema en el siguiente enlace ... que es más o menos lo Esperaba que tuviera que hacer. El bastante molesto google/android no manejó esto de manera más elegante.

para manejar adecuadamente ir a buscar una imagen de la galería que necesita para manejar tres escenarios:

  1. El usuario selecciona un archivo de imagen local

  2. El usuario selecciona una imagen de Picasa y el dispositivo está funcionando Versión de Android anterior a 3.0

  3. El usuario ha seleccionado una imagen de Picasa y el dispositivo ejecuta Android versión 3.0 y superior

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

+0

Ese enlace fue increíblemente útil. – Calvin

Respuesta

5

Eso es lo que descubrí en el dispositivo ejecuta Android 4.0 o superior.

El URI de ICS que dio como ejemplo es un URI con el esquema content: //, por lo que debe haber un ContentProvider responsable de eso. Por lo tanto, ¿cuál es el uso de los trucos que usa getRealPathFromURI()? Simplemente deje que ContentResolver haga este trabajo por usted:

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

¿Cómo obtener el archivo de la ruta de Google Drive? –

+0

¿Sabemos que * hay * un archivo cuando se usa Google Drive? Supongo que el objetivo de ContentResolver es hacer una abstracción de las fuentes de datos. No necesita saber dónde están los datos ni cómo recuperarlos. Podría ser un archivo Podrían ser datos de Google Drive. No te importa –

Cuestiones relacionadas