Я пытаюсь показать файл PDF с помощью поставщика файлов. Однако, когда открывается программа чтения PDF, она не содержит содержимого файла. Файл хранится во внутренней папке приложения в папке с файлами.FileProvider Xamarin не отображает файл
Manifest:
<provider android:name="android.support.v4.content.FileProvider" android:authorities="com.mycom.myapp.fileprovider" android:exported="false" android:grantUriPermissions="true">
<meta-data android:name="android.support.FILE_PROVIDER_PATHS" android:resource="@xml/file_paths" />
</provider>
File_paths:
<paths xmlns:android="http://schemas.android.com/apk/res/android">
<files-path name="export" />
</paths>
pdfViewRenderer.cs:
string libraryPath = Environment.GetFolderPath(Environment.SpecialFolder.Personal);
var path = Path.Combine(libraryPath, fileName);
string application = "application/pdf";
Java.IO.File javaFile = new Java.IO.File(fileName);//externalPath
Android.Net.Uri androidURI = FileProvider.GetUriForFile(Forms.Context.ApplicationContext, "com.mycom.myapp.fileprovider", javaFile);
Intent intent = new Intent(Intent.ActionView);
intent.SetDataAndType(androidURI, Filetype);
intent.AddFlags(ActivityFlags.GrantReadUriPermission);
intent.SetFlags(ActivityFlags.NoHistory);
intent.SetFlags(ActivityFlags.ClearWhenTaskReset);
Forms.Context.StartActivity(Intent.CreateChooser(intent, "Open PDF"));
Это выглядит хорошо, однако результат дает .tmp это будет открыт в программе просмотра PDF? – Simon
@Simon Работает отлично для всех зрителей PDF, которые я использовал, но вы можете использовать 'GetTempPath' и добавлять имя файла по вашему выбору .. i..e.var savePath = Path.Combine (Path.GetTempPath(), pdfAssetName); ' – SushiHangover
Я только вчера работал с ним ... И ваше решение хорошо, но все же дало мне ту же проблему. В дальнейшем я обнаружил, что в разрешениях есть проблема. Получающее приложение получало отказ от разрешения. Предоставляя разрешение URI, это разрешило его, и я мог использовать свой оригинальный код. Неправильно ли использовать внутреннее хранилище, если оно работает? – Simon