【问题标题】:Place for testing write permissions测试写权限的地方
【发布时间】:2018-12-26 18:36:14
【问题描述】:

我正在尝试将文件写入

Environment.GetFolderPath(Environment.SpecialFolder.Personal)

当我尝试这样做时遇到以下错误:

System.UnauthorizedAccessException: Access to the path is denied

我怀疑我有一个更普遍的问题。

为了调试这里可能出现的问题,我想尝试写入故障安全目录(我不需要任何权限)。

谁能告诉我我可以为此选择哪个目录?

如果这也不起作用,我知道我有一个更普遍的问题。 如果这确实有效,则很可能是权限问题。

谢谢。

【问题讨论】:

    标签: android xamarin


    【解决方案1】:

    也许这有帮助

    Xamarin-System.UnauthorizedAccessException: Access to the path is denied

    根据您使用的 Android 版本,即使在 6.0 或更高版本的清单中添加了权限,用户也必须在应用运行时显式启用该权限,并且在安装过程中询问较低版本的权限。例如,在应用启动时,我创建了一个方法来检查它是否已启用,如果未启用则请求权限。

     private void CheckAppPermissions()
    {
      if ((int)Build.VERSION.SdkInt < 23)
      {
        return;
      }
      else
      {
        if (PackageManager.CheckPermission(Manifest.Permission.ReadExternalStorage, PackageName) != Permission.Granted
            && PackageManager.CheckPermission(Manifest.Permission.WriteExternalStorage, PackageName) != Permission.Granted)
        {
            var permissions = new string[] { Manifest.Permission.ReadExternalStorage, Manifest.Permission.WriteExternalStorage };
            RequestPermissions(permissions, 1);
        }
     }
    }
    

    您也可以使用支持库来执行此操作,这样更简单,您不必检查 Android 版本。欲了解更多信息,请查看google's documentation.

    【讨论】:

    • 谢谢。你能告诉我“RequestPermissions”和“PackageName”在哪里吗?我试图简单地将您的代码粘贴到我的 cs 文件中,一切正常,但是在任何库中都找不到这两个。
    • RequestPermissions 和 PackageName 都在 AndroidManifest.xml 中
    • 妈的,我爱上了这个女孩:developer.android.com/training/permissions/requesting
    • 请将if() 中的&amp;&amp; 替换为||
    猜你喜欢
    • 2010-10-18
    • 2012-01-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-03-21
    • 1970-01-01
    • 2012-04-06
    相关资源
    最近更新 更多