¿Puede alguien confirmar que Adobe Reader funciona con un proveedor de contenido personalizado?

He implementado un proveedor de contenido personalizado que sirve documentos pdf como ParcelFileDescriptor. Los archivos se almacenan en el almacenamiento local marcado como PRIVADO. Basándose en un URI, los documentos se entregan a la aplicación pdf seleccionada.

Esto funciona para todas las aplicaciones de PDF Viewer, excepto adobe reader. ¿Puede alguien confirmar que el lector de adobe no funciona con los proveedores de contenido? Código abajo:

Cuando se ha descargado el documento:

private void loadDocInReader(String doc) throws ActivityNotFoundException, Exception { Uri uri = Uri.parse(doc); logger.debug("PDF Application ID is: " + pdfAppID); if (this.pdfAppID != null && this.pdfAppID.length() > 0) { boolean pdfApplicationIsInstalled = checkPDFApplicationIsInstalled(this.pdfAppID); if(pdfApplicationIsInstalled) { Intent intent = new Intent(); intent.setPackage(pdfAppID); intent.setData(uri); intent.setType("application/pdf"); startActivity(intent); } else { logger.error("Please install Adobe Reader first!"); } } else { Intent intent = new Intent(); intent.setData(uri); intent.setType("application/pdf"); startActivity(intent); } } 

Todas las demás aplicaciones de visor de pdf llaman a este método, excepto lector de adobe:

 public class DocumentProvider extends ContentProvider { @Override public ParcelFileDescriptor openFile(Uri uri, String mode) throws FileNotFoundException { File file = null; try { file = new File(uri.getPath()); logger.debug("Delivering ParcelFileDescriptor for path: " + file.getPath()); return ParcelFileDescriptor.open(file, ParcelFileDescriptor.MODE_READ_ONLY); } catch (FileNotFoundException e) { logger.error("Error loading Document: ",e); } finally { if(file.exists()) { file.delete(); } } return null; } @Override public int delete(Uri uri, String selection, String[] selectionArgs) { return 0; } } 

Adobe Reader siempre indica: "Ruta de archivo no válida"

¡¡¡Gracias por adelantado!!! Kay.

Por lo que puedo determinar, Adobe Reader tiene soporte escamoso para leer archivos de ContentProviders. En mi caso, el método openFile se llama y devuelve un ParcelFileDescriptor válido, pero Adobe Reader informa "No se pudo abrir el documento". Mi proveedor de contenido funciona bien con "Drive PDF Viewer", "PDF Reader" y "qPDF Reader", que son algunos de los mejores visores de PDF de la Play Store.

Adobe Reader es capaz de abrir archivos adjuntos de archivos PDF en Gmail utilizando el proveedor de contenido de Gmail, pero no puedo determinar cómo o por qué funciona.

También tengo problemas con Adobe Acrobat Reader que no funciona con mi proveedor personalizado y finalmente lo tengo funcionando. Mi problema era que los archivos en el espacio de archivos local de la aplicación estaban encriptados y sus nombres eran hash. Así que el Uri era algo como:

 content://my.app.provider/08deae8d9ea9bc0b84f94475d868351830e9f7e7 

Funciona con cualquier aplicación de visor de PDF que he probado excepto Adobe Reader. Hoy hice un último intento para agregar una extensión .pdf al Uri de contenido (que definitivamente no es necesario) y cuando Adobe llama a una función openFile() la extensión. ¡VOILA, funciona !!!

Actualizar

Asegúrese de que también la columna _display_name que su ContentProvider devuelve como resultado de query(Uri, String[], String, String[], String) también contiene la extensión .pdf !!!

Nota

Probado con Adobe Acrobat Reader versión 16.3

  • ¿Pueden usarse cargadores sin proveedor de contenido o combinación es obligatorio?
  • Insertar varias filas con ContentProvider
  • Obtener una imagen de Galería desde las carpetas sincronizadas de Picasa // Google + no funciona
  • VIEW de un URI del proveedor de contenido?
  • ContentProvider con WebService como fuente
  • Android: unirse a la consulta mediante el proveedor de contenido
  • Insertar una nueva foto de contacto para Android
  • La consulta ContentResolver está lanzando una excepción nullpointerException
  • Eliminar varias filas de contentprovider
  • Acceso a un proveedor de contenido personalizado desde una aplicación diferente
  • ¿Cuándo se crea realmente un ContentProvider?
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.