Descargar la imagen de la nueva aplicación Google+ (más)
Recientemente, Google agregó la aplicación Fotos para Google+ (más) y aparece cuando inicia un intento de elegir una imagen. Sin embargo, si selecciono una imagen de Google+ Fotos e intento utilizarla en mi aplicación, ninguna de mi lógica actual puede devolver un URI u URL utilizable para obtener una imagen que pueda descargar y manipular. Actualmente utilizo los métodos "comunes" para tratar de manipular el URI que se puede encontrar aquí en Desbordamiento de pila y en otros lugares. Puedo proporcionar código si es necesario, pero en este momento creo que es un poco irrelevante ya que funciona bien para todo lo demás, excepto esta nueva aplicación. ¿Ideas sobre cómo obtener una imagen utilizable?
El URI se parece a lo siguiente:
- Iniciar google hangouts en android
- Nueva interfaz de la tarjeta Google Now y Google+
- Android / Google Plus - No puedo compartir la imagen de mi proveedor de contenido
- Problema con varias cuentas de Google+ en Android mientras comparte la publicación
- No funciona correctamente en el fragmento de Android
content://com.google.android.apps.photos.content/0/https%3A%2F%2Flh5.googleusercontent.com%<a bunch of letters and numbers here>
La información de MediaColumns.DATA
devuelve siempre null y MediaColumns.DISPLAY_NAME
devuelve siempre MediaColumns.DISPLAY_NAME
sin importar lo que elija de la aplicación de Google Fotos. Si intento pegar todo desde https hasta el final en mi navegador, no aparece nada. No estoy seguro de cómo obtener información útil de esto.
- Google Plus compartir desde la aplicación Android
- Iniciar sesión con G + - ¿por qué el ámbito "plus.login" no funciona solo?
- Android: cómo obtener la imagen del perfil de Google+ y la fotografía de portada en el cajón de navegación
- Carga instantánea e imágenes de Google+ en mi aplicación
- Deprecated Plus.PeopleApi.load
- SHA-1 huella dactilar del certificado keystore
- Acceda a google plus client desde múltiples actividades
- ¿Cómo solucionar la conexión fallida en el inicio de sesión de Google+ en android?
Al recibir la intención de los datos, debe utilizar el contentResolver para obtener las fotos. Esto es lo que debe hacer:
String url = intent.getData().toString(); Bitmap bitmap = null; InputStream is = null; if (url.startsWith("content://com.google.android.apps.photos.content")){ is = getContentResolver().openInputStream(Uri.parse(url)); bitmap = BitmapFactory.decodeStream(is); }
Me enfrenté a problemas de selección de imágenes de la nueva aplicación de Google Fotos. Pude resolverlo por debajo del código.
Funciona para mí, básicamente lo que hice es comprobar si hay alguna autoridad está ahí o no en el contenido de URI. Si está allí estoy escribiendo al archivo temporal y la trayectoria de vuelta de esa imagen temporal. Puede omitir la parte de compresión mientras escribe en la imagen temporal
public static String getImageUrlWithAuthority(Context context, Uri uri) { InputStream is = null; if (uri.getAuthority() != null) { try { is = context.getContentResolver().openInputStream(uri); Bitmap bmp = BitmapFactory.decodeStream(is); return writeToTempImageAndGetPathUri(context, bmp).toString(); } catch (FileNotFoundException e) { e.printStackTrace(); }finally { try { is.close(); } catch (IOException e) { e.printStackTrace(); } } } return null; } public static Uri writeToTempImageAndGetPathUri(Context inContext, Bitmap inImage) { ByteArrayOutputStream bytes = new ByteArrayOutputStream(); inImage.compress(Bitmap.CompressFormat.JPEG, 100, bytes); String path = MediaStore.Images.Media.insertImage(inContext.getContentResolver(), inImage, "Title", null); return Uri.parse(path); }
PS: He respondido a una pregunta similar aquí
Tienes que usar la proyección para obtener ImageColumns.DATA
(o MediaColumns.DATA
):
private String getRealPathFromURI(Uri contentURI) { // Projection makes ContentResolver to get needed columns only String[] medData = { MediaStore.Images.Media.DATA }; Cursor cursor = getContentResolver().query(contentURI, medData, null, null, null); // this is how you can simply get Bitmap Bitmap bmp = MediaStore.Images.Media.getBitmap(getContentResolver(), contentURI); // After using projection cursor will have needed DATA column cursor.moveToFirst(); final int idx = cursor.getColumnIndex(MediaStore.Images.ImageColumns.DATA); return cursor.getString(idx); }
- Cómo envolver un sitio web en una aplicación de teléfono?
- Java.util.concurrent.TimeoutException: android.view.ThreadedRenderer.finalize () se ha agotado después de 10 segundos