【问题标题】:System.UnauthorizedAccessException: Access to the path "/Download" is denied. in xamarin androidSystem.UnauthorizedAccessException:对路径“/Download”的访问被拒绝。在 xamarin 安卓中
【发布时间】:2017-01-08 21:00:37
【问题描述】:

我正在尝试从字节数组生成 PDF。但它给出了“访问路径被拒绝”的问题。 我已经在清单文件中给予了许可。我正在发送我的代码块,请检查一下并提供一些建议和反馈,以便我完成它。

 private void ObjbtnViewSlip_Click(object sender, EventArgs e)
    {
        var result = objPaySlipViewModel.GetPaySlipByte(GlobalApplicationSession.EmployeeCode, GlobalApplicationSession.CompanyId, selectedPeriod);
        if (File.Exists(Android.OS.Environment.DirectoryDownloads + "/RSI/PaySlip/temp.pdf") == false)
        {
            Directory.CreateDirectory(Android.OS.Environment.DirectoryDownloads + "/RSI/PaySlip/");
            File.Create(Android.OS.Environment.DirectoryDownloads + "/RSI/PaySlip/temp.pdf");
            System.IO.File.WriteAllBytes(Android.OS.Environment.DirectoryDownloads + "/RSI/PaySlip/", result);
        }
    }

【问题讨论】:

  • 请将图片改为内联代码。人们可以将代码复制粘贴到 IDE 中,帮助您更快地修复它。
  • @matthewrdev 请检查。我需要你的建议来解决这个问题

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


【解决方案1】:

首先,您提供的路径不正确。 Android.OS.Environment.DirectoryDownloads 只会返回“下载”

修改您的代码以获取下载文件夹的完整路径,例如:

//The following will return the downloads folder path.
string directory = Path.Combine(Android.OS.Environment.ExternalStorageDirectory.AbsolutePath, Android.OS.Environment.DirectoryDownloads);
string file = Path.Combine(directory, "/RSI/PaySlip/temp.pdf");

还要检查 AndroidManifest.xml 文件中是否提到了以下内容以授予应用程序权限。

uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE"
uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"

【讨论】:

    【解决方案2】:
      string localStoragePath = System.Environment.GetFolderPath(System.Environment.SpecialFolder.Personal);
                string localFilename = Path.GetFileName(serverFileName);
                string localFilePath = Path.Combine(localStoragePath, localFilename);
    
                if (!System.IO.File.Exists(localFilePath))
                {
                    WebClient webClient = new WebClient();
                    webClient.DownloadFile(serverFileName, localFilePath);          
                }
    
                OpenFile(localFilePath);
    
    
                });
    

    public void OpenFile(字符串文件路径) {

            var bytes = File.ReadAllBytes(filePath);
    
            //Copy the private file's data to the EXTERNAL PUBLIC location
            string externalStorageState = global::Android.OS.Environment.ExternalStorageState;
            string application = "";
    
            string extension = System.IO.Path.GetExtension(filePath);
    
            switch (extension.ToLower())
            {
                case ".doc":
                case ".docx":
                    application = "application/msword";
                    break;
                case ".pdf":
                    application = "application/pdf";
                    break;
                case ".xls":
                case ".xlsx":
                    application = "application/vnd.ms-excel";
                    break;
                case ".jpg":
                case ".jpeg":
                case ".png":
                    application = "image/jpeg";
                    break;
                default:
                    application = "*/*";
                    break;
            }
            var externalPath = global::Android.OS.Environment.ExternalStorageDirectory.Path + "/report" + extension;
            File.WriteAllBytes(externalPath, bytes);
    
            Java.IO.File file = new Java.IO.File(externalPath);
            file.SetReadable(true);
            //Android.Net.Uri uri = Android.Net.Uri.Parse("file://" + filePath);
            var uri = global::Android.Net.Uri.FromFile(file);
            Intent intent = new Intent(Intent.ActionView);
            intent.SetDataAndType(uri, application);
            intent.SetFlags(ActivityFlags.ClearWhenTaskReset | ActivityFlags.NewTask);
    
            try
            {
                Application.Context.StartActivity(intent);
            }
            catch (Exception)
            {
                Toast.MakeText(Application.Context, "No Application Available to View PDF", ToastLength.Short).Show();
            }
        }
    

    【讨论】:

      猜你喜欢
      • 2018-04-05
      • 2017-01-24
      • 1970-01-01
      • 1970-01-01
      • 2021-04-02
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多