Совместное использование файла PDF из моего каталога приложений с другим приложением работает, но его открытие не дает - PullRequest
0 голосов
/ 23 декабря 2019

Я использую файл-провайдер для сохранения и получения файлов PDF, созданных моим приложением. Я хотел поделиться и открыть эти файлы с другими приложениями PDF. Обмен работает, но открытие не. Вот код для совместного использования и открытия файлов PDF:

Совместное использование:

    private void shareTheFile(int position) {
    try {
        File docPath=new File(SavedPdfActivity.this.getFilesDir(),"Documents");
        Log.d(TAG, "shareTheFile: document dir path="+docPath.getAbsolutePath());
        File file = new File(mList.get(position).getFilePath());
        Log.d(TAG, "shareTheFile: file path as saved in db="+file.getAbsolutePath());
        String fileName=file.getName();
        File newFile=new File(docPath, fileName);
        Log.d(TAG, "shareTheFile: new file path="+newFile.getAbsolutePath());
        Uri uri= FileProvider.getUriForFile(SavedPdfActivity.this, "com.rewoke.prixpi.pdfprovider", newFile);
        Log.d(TAG, "shareTheFile: uri="+uri.toString());
        Intent intentShareFile = new Intent();
        intentShareFile.setAction(Intent.ACTION_SEND);
        intentShareFile.setDataAndType(uri, getContentResolver().getType(uri));
        intentShareFile.putExtra(Intent.EXTRA_STREAM, uri);
        intentShareFile.putExtra(Intent.EXTRA_TEXT, mList.get(position).getFileName());
        PackageManager pm = getPackageManager();
        if (intentShareFile.resolveActivity(pm) != null) {
            startActivity(Intent.createChooser(intentShareFile, "Share file"));
        }
    }catch (Exception e){
        Log.d(TAG, "shareTheFile: error msg="+e.getMessage());
        e.printStackTrace();
    }
}

и Открытие PDF:

 private void openThePdf(int position) {
    File docPath=new File(SavedPdfActivity.this.getFilesDir(),"Documents");
    File file = new File(mList.get(position).getFilePath());
    String fileName=file.getName();
    File newFile=new File(docPath, fileName);

    try {
        Uri uri = FileProvider.getUriForFile(SavedPdfActivity.this, "com.application.name.pdfprovider", newFile);
        Intent openIntent = new Intent(Intent.ACTION_VIEW, uri);
        openIntent.addFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION);
        PackageManager pm = getPackageManager();
        if (openIntent.resolveActivity(pm) != null) {
            startActivity(Intent.createChooser(openIntent, "Open file"));
        }
    }catch (Exception e){
        Log.d(TAG, "openThePdf: error msg="+e.getMessage());
    }
}

Я получаю ошибку какэто при попытке открыть файл с помощью приложения Drive PDF Viewer:

openFd: java.io.FileNotFoundException: open failed: ENOENT (No such file or directory)

Мой файл-провайдер:

  <provider
        android:authorities="{$appliation_name}.pdfprovider"
        android:name=".helper.CustomFileProvider"
        android:exported="false"
        android:grantUriPermissions="true">
        <meta-data
            android:name="android.support.FILE_PROVIDER_PATHS"
            android:resource="@xml/filepaths"/>
    </provider>

Мои журналы:

2019-12-23 12:17:26.100 19822-19822/com.rewoke.prixpi D/SavedPdfActivity: shareTheFile: document dir path=/data/user/0/com.rewoke.prixpi/files/Documents
2019-12-23 12:17:26.100 19822-19822/com.rewoke.prixpi D/SavedPdfActivity: shareTheFile: file path as saved in db=/storage/emulated/0/Android/data/com.rewoke.prixpi/files/Documents/PrixpiPDF_2019-12-357 11:30:503867655244253323634.pdf
2019-12-23 12:17:26.100 19822-19822/com.rewoke.prixpi D/SavedPdfActivity: shareTheFile: new file path=/data/user/0/com.rewoke.prixpi/files/Documents/PrixpiPDF_2019-12-357 11:30:503867655244253323634.pdf
2019-12-23 12:17:26.101 19822-19822/com.rewoke.prixpi D/SavedPdfActivity: shareTheFile: uri=content://com.rewoke.prixpi.pdfprovider/my_docs/PrixpiPDF_2019-12-357%2011%3A30%3A503867655244253323634.pdf
...