¿Por qué usar un FileProvider? No puedo abrir el archivo desde INTERNAL STORAGE con aplicaciones externas.

He creado una aplicación que puede importar el archivo en su almacenamiento interno. Para abrir un archivo con una aplicación externa (por ejemplo, PF viewer o Photos) he intentado seguir estas guías: la guía oficial , topic1 , topic2 , topic3 y topic4 pero sin éxito.

Aquí está mi código:

En mi manifiesto

<provider android:name="android.support.v4.content.FileProvider" android:authorities="com.myapp.chatcher" android:exported="false" android:grantUriPermissions="true"> <meta-data android:name="android.support.FILE_PROVIDER_PATHS" android:resource="@xml/file_paths" /> </provider> 

Mi valor del paquete: package="com.myapp.catcher"

My file_paths.xml

 <paths xmlns:android="http://schemas.android.com/apk/res/android"> <files-path name="projection" path="." /> </paths> 

mi código

 String fileName = path.substring(path.lastIndexOf("/") + 1); String shelf = path.substring(path.lastIndexOf("PRIVATE") + 8, path.lastIndexOf("/")); File filePath = new File(mContext.getFilesDir(), "PRIVATE".concat("/").concat(shelf).concat("/")); File newFile = new File(filePath, fileName); Uri contentUri = FileProvider.getUriForFile(mContext, "com.myapp.chatcher", newFile); Intent myIntent = new Intent(); myIntent.setAction(Intent.ACTION_VIEW); myIntent.setData(contentUri); myIntent.setType(mimeType); myIntent.setFlags(FLAG_GRANT_READ_URI_PERMISSION | FLAG_GRANT_WRITE_URI_PERMISSION); mContext.startActivity(myIntent); 

He creado una jerarquía como esta:

 PRIVATE -> shelf1 -> my files -> shelf2 -> my files -> shelfN -> my files 

Por ejemplo: data/user/0/com.myapp.chatcher/files/PRIVATE/testshelf/Screenshot_2017-01-04-09-45-13.png

El resultado de imprimir el newFile.getAbsolutePath () es

 /data/user/0/com.myapp.chatcher/files/PRIVATE/bogl/imagetest.jpg 

Este código abre el selector en el que puedo hacer clic en "Fotos" y luego se abre la "aplicación Fotos" sin mostrarme el imagetest.jpg pero la carpeta en la que hay todas las imágenes. Si intento con un archivo pdf, no abre el pdf y aparece un brindis con el mensaje "no media".

¿Qué tiene de malo mi código?

Gracias a @greenapps que es un experto en Android, me di cuenta de que el problema no estaba en el proveedor sino en la intención.

En lugar de esto:

 Intent myIntent = new Intent(); myIntent.setAction(Intent.ACTION_VIEW); myIntent.setData(contentUri); myIntent.setType(mimeType); myIntent.setFlags(FLAG_GRANT_READ_URI_PERMISSION | FLAG_GRANT_WRITE_URI_PERMISSION); mContext.startActivity(myIntent); 

Necesito hacer esto:

 Intent myIntent = new Intent(Intent.ACTION_VIEW); myIntent.setDataAndType(contentUri, mimeType); myIntent.setFlags(FLAG_GRANT_READ_URI_PERMISSION | FLAG_GRANT_WRITE_URI_PERMISSION); mContext.startActivity(myIntent); 
  • ¿Cómo utilizar el soporte FileProvider para compartir contenido con otras aplicaciones?
  • La intención de compartir imágenes funciona para Gmail pero bloquea FB y twitter
  • IllegalArgumentException: Error al encontrar la raíz de configuración que contiene xxx en FileProvider.getUriForFile
  • Compartir imágenes almacenadas en caché utilizando FileProvider
  • Implementación de un selector de archivos en Android y copia del archivo seleccionado en otra ubicación
  • Fotos de Google+ ACTION_VIEW, FLAG_GRANT_PERSISTABLE_URI_PERMISSION Excepción
  • Selección de un archivo de imagen de la Galería mediante FileProvider
  • EXCEPCIÓN FATAL: ThumbnailManager-1 mientras comparte imágenes con Intent
  • FileProvider produce excepción en GetUriForFile
  • ¿Cómo compartir archivos desde cualquier ruta usando un FileProvider?
  • Error de FileProvider
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.