Intentando abrir un archivo PDF desde la carpeta de activos usando fileProvider pero da FileNotFoundException: No existe dicho archivo o directorio [duplicad

Esta pregunta ya tiene una respuesta aquí:

Lea un archivo pdf de la carpeta de activos 7 respuestas

Estoy tratando de mostrar el archivo "NEFT.pdf" almacenado en la carpeta de activos de mi aplicación de Android.
El siguiente código funciona absolutamente bien hasta API 25

private void CopyReadAssets(String filename) {
    AssetManager assetManager = getAssets();
    InputStream in = null;
    OutputStream out = null;
    File file = new File(getFilesDir(), filename);

    try {
        in = assetManager.open(filename);
        out = openFileOutput(file.getName(), Context.MODE_WORLD_READABLE);

        copyFile(in, out);
        in.close();
        in = null;
        out.flush();
        out.close();
        out = null;


        Intent intent = new Intent(Intent.ACTION_VIEW);
        intent.setDataAndType(
                Uri.parse("file://" + getFilesDir() + "/"+filename), "application/pdf");

        startActivity(intent);
    } catch (Exception e)
    {
        Toast.makeText(PdfFilesList.this, "cra: "+e.toString(), Toast.LENGTH_SHORT).show();
    }
}

Este código no funciona en API 25 y superior. Da el error MODE_WORLD_READABLE ya no es compatible
Lo cambié a MODE_PRIVATE pero eso me da otro error

android.os.fileuriexposedexception expuesto más allá de la aplicación a través de intent.getdata ().
Así que apliqué el concepto explicado en Developer.Android.com.
Esto es lo que obtengo en el registro de errores:

E / DisplayData: openFd: java.io.FileNotFoundException: No existe tal archivo o directorio

E / PdfLoader: No se puede cargar el archivo (no se abre) Mostrar datos [PDF: NEFT.pdf] + ContentOpenable, uri: contenido: //com.user.plansmart.provider/pdf_files/NEFT.pd

uri me parece correcto. ¿Alguien puede ayudarme a localizar el error aquí.

Aquí está elproveedo elemento en el archivo de manifiesto.

<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>

Este es el provider_paths.xml archiv

<?xml version="1.0" encoding="utf-8"?>
<paths xmlns:android="http://schemas.android.com/apk/res/android">
<external-path name="external_files" path="."/>
<files-path name="pdf_files" path="pdf/"/>

Este es el código de Android para mostrar el archivo pdf

private void displayFile(String filename) {
    try {
        File filePath = new File(getApplicationContext().getFilesDir(), "pdf");
        File newFile =  new File(filePath, filename);

        //new version
        Uri fileUri = FileProvider.getUriForFile(PdfFilesList.this,
                BuildConfig.APPLICATION_ID + ".provider", newFile);

        getApplicationContext().grantUriPermission(PACKAGE_NAME,
                            fileUri, Intent.FLAG_GRANT_READ_URI_PERMISSION | Intent.FLAG_GRANT_WRITE_URI_PERMISSION);

        Intent intent = new Intent(Intent.ACTION_VIEW);
        intent.setDataAndType(fileUri, "application/pdf");
        intent.setFlags(FLAG_GRANT_READ_URI_PERMISSION | FLAG_GRANT_WRITE_URI_PERMISSION);
        startActivity(intent);
    }catch (Exception e){
        e.printStackTrace();
        Toast.makeText(PdfFilesList.this, "df "+e.toString(), Toast.LENGTH_SHORT).show();
    }
}

Respuestas a la pregunta(1)

Su respuesta a la pregunta