Как открыть файл с помощью приложения по умолчанию

#c# #xamarin #xamarin.forms #xamarin.android

#c# #xamarin #xamarin.forms #xamarin.android

Вопрос:

Я пытаюсь открыть PDF-файл с помощью программы просмотра pdf по умолчанию xamarin forms, но получаю исключение:

Android.OS.FileUriExposedException: файл: /// хранилище / эмулируемый / 0 / pdfy / pdfik.pdf, доступный за пределами приложения через Intent.getData()

Я добавил разрешения READ_EXTERNAL_STORAGE и WRITE_EXTERNAL_STORAGE, и это:

     while (ContextCompat.CheckSelfPermission(this, Manifest.Permission.WriteExternalStorage) != (int)Permission.Granted)
    {
        ActivityCompat.RequestPermissions(this, new string[] { Manifest.Permission.WriteExternalStorage }, 0);
    }
    while (ContextCompat.CheckSelfPermission(this, Manifest.Permission.ReadExternalStorage) != (int)Permission.Granted)
    {
        ActivityCompat.RequestPermissions(this, new string[] { Manifest.Permission.ReadExternalStorage}, 0);
    }
  

Вот как я пытаюсь открыть файл:

  public bool OpenFile(string filename)
            {
                Android.Net.Uri uri = Android.Net.Uri.FromFile(new Java.IO.File(filename));
                Intent intent = new Intent(Intent.ActionView);
                String mimeType = MimeTypeMap.Singleton.GetMimeTypeFromExtension(MimeTypeMap.GetFileExtensionFromUrl((string)uri).ToLower());
                intent.SetDataAndType(uri, mimeType);

                intent.SetFlags(ActivityFlags.ClearWhenTaskReset | ActivityFlags.NewTask);

                try
                {
                    Xamarin.Forms.Forms.Context.StartActivity(intent);
                    //ApplicationContext.StartActivity(intent);
                    return true;
                }
                catch (System.Exception ex)
                {
                    Toast.MakeText(Xamarin.Forms.Forms.Context, "No Application Available to View this file", ToastLength.Short).Show();
                    //Toast.MakeText(ApplicationContext, "No Application Available to View this file", ToastLength.Short).Show();
                    return false;
                }
            }
  

Ответ №1:

Попробуйте использовать FileProvider для пути к PDF:

 Android.Net.Uri pdfPath = FileProvider.GetUriForFile(context, "com.mydomain.fileprovider", new Java.IO.File(filePath));
  

Найдите пример здесь: https://github.com/xamarin/Essentials/issues/130