Я использую файл-провайдер для сохранения и получения файлов 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