android - link - Obtener imagen uri de picasso?
share text android intent (1)
Si desea utilizar ShareActionProvider
para compartir la imagen en la página actual, no es necesario que guarde su propio caché de imágenes. Pero para poder compartirlo con otros, la imagen debe estar en el sistema de archivos compartidos en el dispositivo.
Sería mejor si utiliza bibliotecas de carga de imágenes con soporte personalizado de caché de disco como Universal Image Loader
Si quieres usar Picasso (que es una buena decisión).
O bien tiene que guardar una copia de la imagen en cada cambio de página que no es una buena opción.
O bien, puede asignar un controlador de red personalizado a Picasso y establecerle una implementación de caché personalizada. Sugeriría usar OkHttp con almacenamiento en caché personalizado, que almacena los archivos en el formato que desee. Cuando lo haces, debes tener una función que convierta las URL de las imágenes a la ruta del archivo en un dispositivo.
En cada cambio de página, si tiene un Fragment
dentro de su ViewPager
, coloque el ShareActionProvider
en sus Fragmentos.
Obtenga la referencia de ShareActionProvider
dentro de onCreateOptionsMenu
. Y luego establece la intención con la ruta del archivo que obtienes.
Intent shareIntent = new Intent(Intent.ACTION_SEND);
Uri phototUri = Uri.parse(Utils.getFilePath(imageUrl));
shareIntent.setData(phototUri);
shareIntent.setType("image/png");
shareIntent.putExtra(Intent.EXTRA_STREAM, phototUri);
mShareActionProvider.setShareIntent(intent);
Editar: La otra opción que preferiría es abandonar ShareActionProvider
y usar un elemento de menú normal para esto. El problema con ShareActionProvider
es que tienes que hacer que Compartir contenido esté listo para que el usuario lo comparta de ShareActionProvider
. Debes prepararlo incluso si el usuario no lo comparte.
Pero cuando tienes un botón normal, es mucho más fácil porque solo realizas la operación cuando el usuario hace clic en el botón Compartir. En ese caso, simplemente puede solicitar la imagen una vez más desde Picasso
con un objeto Target
y escribir el Bitmap
que obtuvo en un archivo en el sistema de archivos externo compartido y compartirlo.
Tengo una lista bastante grande de URL de imagen que estoy usando para cargar un ViewPager
usando Picasso. Necesito poder proporcionar capacidades de intercambio para estas imágenes a través de una intención (en última instancia, compartir a través de ShareActionProvider ). Según lo que he leído, Picasso no está hecho para manejar este tipo de cosas de la caja, aunque proporciona todas las herramientas necesarias para hacerlo.
Mi plan antes de la investigación era crear un LruCache
simple que utilizara la url como la clave y el valor del mapa de bits. Este almacenamiento en caché se realizará en onBitmapLoaded
través de la interfaz de Target
de Picasso. Siempre que quiera compartir una imagen, verificaré el caché para el mapa de bits. Si no está allí, buscaré a Picasso. Ahora que tengo un mapa de bits almacenado en caché, escribiré en un archivo (... esta parte no me parece correcta, aunque tengo que escribir en un archivo para obtener un uri, ¿no?) Y agregaré el archivo uri a la intención
Sin embargo, veo que con Picasso.Builder
puedo establecer (y conservar una referencia) mi propio caché - https://stackoverflow.com/a/18552559/413254 . Esto significa que podría eliminar el Target
personalizado y la confusión con la implementación correcta del hashCode
e equals
métodos para garantizar el reciclado, la recuperación, etc. precisos.
Mi pregunta es, ¿cómo usa Picasso este caché? ¿Cuáles son las llaves? ¿Hay alguna forma de obtener un URI de mapa de bits sin escribirlo en el disco?