Я работаю в Xamarin.Android.Есть модуль, который мне нужен для загрузки файлов PDF или DOC в папку мобильных загрузок, и мне сразу же нужно открыть файл.Скачать функционал работает нормально.
Я пытаюсь открыть загруженный файл с помощью стороннего приложения.Я реализовал следующий код.
Включить строки 300 - 310 из /FragmentOfferDetails.cs
Intent intent = new Intent (Intent.ActionView);
var documentsPath = System.Environment.GetFolderPath (System.Environment.SpecialFolder.Personal);
string filePath = Path.Combine (documentsPath, file);
Android.Net.Uri uri = FileProvider.GetUriForFile (this.Context, Application.Context.PackageName + ".fileprovider", new Java.IO.File (filePath));
if (uri != null) {
intent.SetFlags (Android.Content.ActivityFlags.GrantReadUriPermission);
} else {
uri = Android.Net.Uri.FromFile (new Java.IO.File (filePath));
}
intent.SetDataAndType (uri, attachment.mimeType);
intent.SetFlags (ActivityFlags.ClearWhenTaskReset || ActivityFlags.NewTask);
Intent intentChooser = Intent.CreateChooser (intent, "Open File");
this.StartActivity (intentChooser);
provider_paths.xml
<?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="files" path="."/>
<internal-path name="internal_files" path="."/>
</paths>
AndroidManifest.xml
Внутри тега приложения
<provider
android:name="android.support.v4.content.FileProvider"
android:authorities="${applicationId}.fileProvider"
android:grantUriPermissions="true"
android:exported="false">
<meta-data
android:name="android.support.FILE_PROVIDER_PATHS"
android:resource="@xml/provider_paths" />
</provider>
Я ожидаю, что средство просмотра PDF откроется с конкретным файлом PDF.
Но я получаю исключение в этой строке
Android.Net.Uri uri = FileProvider.GetUriForFile (this.Context, Application.Context.PackageName + ".fileprovider", new Java.IO.File (filePath));
, и исключение:
Java.Lang.RuntimeException: попытка вызвать виртуальный метод 'android.content.res.XmlResourceParser android.content.pm.PackageItemInfo.loadXmlMetaData (android.content.pm.PackageManager, java.lang.String) 'для ссылки на пустой объект
Я пробовал этокод с множеством мелких изменений.Но я не могу решить это.