【问题标题】:How to open file by default application默认应用程序如何打开文件
【发布时间】:2019-04-15 17:47:18
【问题描述】:

我正在尝试默认打开 pdf 文件 pdf 查看器 xamarin 表单,但出现异常:

Android.OS.FileUriExposedException: file:///storage/emulated/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;
                }
            }

【问题讨论】:

    标签: c# xamarin xamarin.forms xamarin.android


    【解决方案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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2020-08-29
      • 2013-09-26
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多