<provider
android:name="android.support.v4.content.FileProvider"
android:authorities="${applicationId}.provider"
android:exported="false"
android:grantUriPermissions="true">
<meta-data
android:name="android.support.FILE_PROVIDER_PATHS"
android:resource="@xml/provider_paths"/>
</provider>
...y en en la carpeta xml (res/xml), agregar un xml con los paths permitidos para acceder ...
..o bien la ruta raíz como en el sig. ejemplo:
<?xml version="1.0" encoding="utf-8"?> <paths xmlns:android="http://schemas.android.com/apk/res/android"> <external-path name="external_files" path="."/> </paths>
... luego obtener el Uri para el fichero y opcionalmente obtener permiso temporal
(ver seccion "Granting Temporary Permissions to a URI" en https://developer.android.com/reference/android/support/v4/content/FileProvider.htmlyo claro )
espero que la info te sirva, saludos!
--
Para participar es necesario que leas detenidamente las normas del grupo: https://goo.gl/xeTRQm
---
Has recibido este mensaje porque estás suscrito al grupo "desarrolladores-android" de Grupos de Google.
Para anular la suscripción a este grupo y dejar de recibir sus mensajes, envía un correo electrónico a desarrolladores-android+unsub...@googlegroups.com.
Para publicar en este grupo, envía un correo electrónico a desarrolladores-android@googlegroups.com.
Visita este grupo en https://groups.google.com/group/desarrolladores-android.
Para ver esta conversación en el sitio web, visita https://groups.google.com/d/msgid/desarrolladores-android/c98a594d-ab06-4134-9329-0676c77a2206%40googlegroups.com.
Para acceder a más opciones, visita https://groups.google.com/d/optout.
Has recibido este mensaje porque estás suscrito a un tema del grupo "desarrolladores-android" de Grupos de Google.
Para anular la suscripción a este tema, visita https://groups.google.com/d/topic/desarrolladores-android/LluIkw4lO8s/unsubscribe.
Para anular la suscripción a este grupo y a todos sus temas, envía un correo electrónico a desarrolladores-a...@googlegroups.com.
Para publicar en este grupo, envía un correo electrónico a desarrollad...@googlegroups.com.
Visita este grupo en https://groups.google.com/group/desarrolladores-android.
Para ver esta conversación en el sitio web, visita https://groups.google.com/d/msgid/desarrolladores-android/CAMsit%2BBnLG0bD%2Bc2xXz2N8uX9AAmQp%3DvZR7yqCcOJjGOrXWBYA%40mail.gmail.com.
Para acceder a más opciones, visita https://groups.google.com/d/optout.
Intent intent = new Intent(Intent.ACTION_VIEW);
intent.setDataAndType(Uri.fromFile(miPdf),"application/pdf");
intent.setFlags(Intent.FLAG_ACTIVITY_NO_HISTORY);
startActivity(intent); --> aqui da el error
Gracias.
<?xml version="1.0" encoding="utf-8"?>
<paths xmlns:android="http://schemas.android.com/apk/res/android">
<files-path name="pdfss" path="pverd/"/>
</paths>
y en el manifiest:
<provider
android:name="android.support.v4.content.FileProvider"
android:authorities="${applicationId}.provider"
android:exported="false"
android:grantUriPermissions="true">
<meta-data
android:name="android.support.FILE_PROVIDER_PATHS"
android:resource="@xml/provider_paths"/>
</provider>
ahora mismo la llamada la hago asi:(aunque se que esta mal, pero no se como montarla)String carpeta = Environment.getExternalStorageDirectory() + File.separator + "pverd";
File fCarpeta = new File(carpeta);
File miPdf = new File(carpeta, pfpdf);
Intent intent = new Intent(Intent.ACTION_VIEW);
intent.setDataAndType(FileProvider.getUriForFile(this, "es.puigverd.puigverd.fileprovider", miPdf),"application/pdf"); //-mipdf tiene este valor: "/storage/emulated/0/pverd/trabA161023001.pdf"
intent.setFlags(Intent.FLAG_ACTIVITY_NO_HISTORY);
startActivity(intent);el logcat:E/AndroidRuntime: FATAL EXCEPTION: main Process: es.puigverd.puigverd, PID: 15253 java.lang.NullPointerException: Attempt to invoke virtual method 'android.content.res.XmlResourceParser android.content.pm.ProviderInfo.loadXmlMetaData(android.content.pm.PackageManager, java.lang.String)' on a null object reference at android.support.v4.content.FileProvider.parsePathStrategy(FileProvider.java:561) at android.support.v4.content.FileProvider.getPathStrategy(FileProvider.java:535) at android.support.v4.content.FileProvider.getUriForFile(FileProvider.java:377) at es.puigverd.puigverd.otss.otss.verpdf(otss.java:590) at es.puigverd.puigverd.otss.otss.InfTrabajo(otss.java:580) at es.puigverd.puigverd.otss.otss.onClick(otss.java:291) at android.view.View.performClick(View.java:5609) at android.view.View$PerformClick.run(View.java:22259) at android.os.Handler.handleCallback(Handler.java:751) at android.os.Handler.dispatchMessage(Handler.java:95) at android.os.Looper.loop(Looper.java:154) at android.app.ActivityThread.main(ActivityThread.java:6077) at java.lang.reflect.Method.invoke(Native Method) at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:865) at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:755)
<external-path name="external_files" path="pverd" />
en lugar del <file-path...
ademas veo una diferencia, que no es el mismo autority en el atributo del provider que el del código java,en el manifest usas:
android:authorities="${applicationId}.provider"
que debe producir algo como: es.puigverd.puigverd.provider
y en código estas usando:FileProvider.getUriForFile(this, "es.puigverd.puigverd.fileprovider ...
y creo que debe serFileProvider.getUriForFile(this, "es.puigverd.puigverd.provider
<?xml version="1.0" encoding="utf-8"?>
<paths xmlns:android="http://schemas.android.com/apk/res/android">
<external-path name="external_files" path="."/>
</paths>
y en el manifiest:
<provider
android:name="android.support.v4.content.FileProvider"
android:authorities="${applicationId}.provider"
android:exported="false"
android:grantUriPermissions="true">
<meta-data
android:name="android.support.FILE_PROVIDER_PATHS"
android:resource="@xml/provider_paths"/>
</provider>
y la llamada:
String carpeta = Environment.getExternalStorageDirectory() + File.separator + "pverd";
File miPdf = new File(carpeta, pfpdf);
Uri pdfURI = FileProvider.getUriForFile(this, this.getApplicationContext().getPackageName() + ".provider", miPdf);
Intent intent = new Intent(Intent.ACTION_VIEW);
intent.setDataAndType(pdfURI,"application/pdf");
intent.setFlags(Intent.FLAG_ACTIVITY_NO_HISTORY);
intent.addFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION);
startActivity(intent);Aquí queda por si le puede servir a alguienLo doy por finalizado.Gracias Martín.