相关文章推荐
刚毅的香蕉  ·  快速入门:连接并查询 SQL Server ...·  1 年前    · 
暴走的黄豆  ·  PHP array_multisort() ...·  2 年前    · 
豪爽的皮带  ·  使用WebSocket将音频从客户端传输到服 ...·  2 年前    · 
暴走的感冒药  ·  在python中修改xarray图例·  2 年前    · 
Code  ›  MAUI :System.UnauthorizedAccessException:拒绝对路径的访问开发者社区
system
https://cloud.tencent.com/developer/ask/sof/107179876
有胆有识的香瓜
2 月前
首页
学习
活动
专区
圈层
工具
MCP广场
返回腾讯云官网
提问

问 MAUI :System.UnauthorizedAccessException:拒绝对路径的访问

Stack Overflow用户
提问于 2022-08-03 11:55:33
EN

我正在制作一个新的跨平台MAUI应用程序,我试图简单地创建一个json file.the源代码,如下所示:

代码语言: javascript
运行
复制
     private async void WriteSomething()
#if ANDROID
        FileStream fs = new(System.Environment.GetFolderPath(System.Environment.SpecialFolder.Personal) + "/test.json", FileMode.Create);
        StreamWriter sw = new StreamWriter(fs, System.Text.Encoding.UTF8);
        await sw.WriteAsync(str);
        sw.Close();
        fs.Close();
#elif WINDOWS
        string path = Environment.GetFolderPath(Environment.SpecialFolder.MyDocuments) + "\\test.json";
        FileStream fs = new(path, FileMode.Create);
        StreamWriter sw = new StreamWriter(fs, System.Text.Encoding.UTF8);
        await sw.WriteAsync(str);
        sw.Close();
        fs.Close();
#endif
    }

该程序在windows机器上运行良好,但该程序将System.UnauthorizedAccessException抛到安卓仿真器上。我已经在StackOverflow上搜索过这个问题,但大多数问题都是在Xamarin平台上进行的。(Xamarin.Android或Xamarin.Forms)

根据答案,我应该请求这样的存储许可:

首先,向我的AndroidManifest.xml添加以下代码:

代码语言: javascript
运行
复制
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />

其次,检查目标android版本是Android还是above.If答案是正确的,然后调用RequestPermissions方法:

代码语言: javascript
运行
复制
#if ANDROID
    private void CheckAppPermissions()
        if ((int)Build.VERSION.SdkInt < 23)
            return;
            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);
#endif

但是,我发现Android命名空间中没有这样的方法。

CS0103名称"RequestPermissions“在当前上下文中不存在。

我猜它只存在于platform.Or中,它确实存在于另一个namespace.And中,这意味着我无法获得所需的读和写权限。

需要一个全新的许可问题解决方案。

**注:**我的英语是poor.And我有一点编程experience.Please原谅我。

提前谢谢。

2 556 0 票数 0
EN
android
.net
maui

回答 2

Stack Overflow用户

回答已采纳

发布于 2022-08-04 02:50:03

实际上,如果您只是在 System.Environment.GetFolderPath(System.Environment.SpecialFolder.Personal) 路径中操作文件,那么它不需要任何存储权限。因为这是应用程序自己的私人文件夹。我在一个新项目中测试了您的代码,成功地创建了josn文件。

此外,如果要请求maui中的权限,则需要在maui中使用api。您可以使用以下代码代替您的代码。

代码语言: javascript
运行
复制
 PermissionStatus statusread = await Permissions.RequestAsync<Permissions.StorageRead>();
 PermissionStatus statuswrite = await Permissions.RequestAsync<Permissions.StorageWrite>();

最后,您也可以使用Mahesh提到的权限,但是如果需要的话,应该使用它。如果仍然需要,可以尝试在MainActivity中添加以下代码,以授予用户权限。

代码语言: javascript
运行
复制
protected override void OnCreate(Bundle savedInstanceState)
    if (!Android.OS.Environment.IsExternalStorageManager)
        Intent intent = new Intent();
        intent.SetAction(Android.Provider.Settings.ActionManageAppAllFilesAccessPermission);
 
推荐文章
刚毅的香蕉  ·  快速入门:连接并查询 SQL Server - Azure Data Studio | Microsoft Learn
1 年前
暴走的黄豆  ·  PHP array_multisort() 函数-腾讯云开发者社区-腾讯云
2 年前
豪爽的皮带  ·  使用WebSocket将音频从客户端传输到服务器,再传输到客户端-腾讯云开发者社区-腾讯云
2 年前
暴走的感冒药  ·  在python中修改xarray图例
2 年前
今天看啥   ·   Py中国   ·   codingpro   ·   小百科   ·   link之家   ·   卧龙AI搜索
删除内容请联系邮箱 2879853325@qq.com
Code - 代码工具平台
© 2024 ~ 沪ICP备11025650号