FileProvider.GetUrlForFile () не работает с версией Android 8 - PullRequest
0 голосов
/ 24 декабря 2018

Я работаю в 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) 'для ссылки на пустой объект

Я пробовал этокод с множеством мелких изменений.Но я не могу решить это.

...