Las API del proveedor de contenido/resolver proporcionan una forma complicada pero sólida de transferir datos entre procesos utilizando un URI y los métodos openInputStream()
y openOutputStream()
. Los proveedores de contenido personalizado tienen la capacidad de anular el método openFile()
con código personalizado para resolver efectivamente un URI en un Stream
; sin embargo, la firma de método de openFile()
tiene un tipo de devolución ParcelFileDescriptor
y no está claro cómo se puede generar una representación adecuada para que el contenido generado dinámicamente regrese de este método.Custom ContentProvider - openInputStream(), openOutputStream()
Returning a memory mapped InputStream from a content provider?
¿Hay ejemplos de la aplicación de ContentProvider.openFile()
método para contenido dinámico en la base de código existente? Si no, ¿puede sugerir el código fuente o el proceso para hacerlo?
¿hay planes para incluir una conversión entre una y memoryfile parcelfiledescriptor en el futuro? Algo en ese sentido sería más agradable que saturar/contaminar el sistema de archivos con archivos temporales con tiempos de vida desconocidos. Quizás haya alguna forma de detectar el cierre de la transmisión dentro del proveedor de contenido que podría ofrecer una forma más segura de limpieza después de usted mismo. Me preocupa enviar archivos adjuntos a un cliente de correo electrónico (gmail/standaed), aunque estoy seguro de que hay otros lugares donde podrían surgir estos problemas. – hannasm
Sí, MemoryFile.java actualmente tiene el método 'public ParcelFileDescriptor getParcelFileDescriptor()'. Esto fue cometido como parte de Donut, pero como dijo Jeff, aún no está finalizado. He confirmado que el "concepto" al menos funciona, y se puede hacer actualmente, utilizando la reflexión. Sin embargo, es muy sucio y no recomendado :) Desafortunadamente, incluso 'ParcelFileDescriptor.fromSocket()' no se puede usar porque 'Memory.isMemoryFile()' arroja una excepción porque el socket no es ni un PFD ni un archivo de memoria. – Joe
Cuidado con MemoryFile. Si lo entiendo correctamente, almacena todo el contenido de un archivo en la memoria, por lo que no puede usar archivos más grandes que la memoria disponible. –