相关文章推荐
刚毅的炒面  ·  C# 定时器保活机制引起的内存泄露问题开发者社区·  2 周前    · 
完美的脸盆  ·  C# ...·  2 周前    · 
勤奋的饭卡  ·  c++二维矩阵序列化与反序列化 - CSDN文库·  1 年前    · 
千杯不醉的牙膏  ·  Comparison Operators ...·  1 年前    · 
活泼的登山鞋  ·  使用PHP的反射类来执行MySQL查询安全吗 ...·  1 年前    · 
绅士的斑马  ·  html - ...·  2 年前    · 
开朗的大白菜  ·  日常踩坑:valueerror: the ...·  2 年前    · 
Code  ›  MAUI :System.UnauthorizedAccessException:拒绝对路径的访问开发者社区
system
https://cloud.tencent.com/developer/ask/sof/107179876
有胆有识的香瓜
5 月前
首页
学习
活动
专区
圈层
工具
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);
 
推荐文章
刚毅的炒面  ·  C# 定时器保活机制引起的内存泄露问题开发者社区
2 周前
完美的脸盆  ·  C# system.Threading.Timer和system.Timers中的定时器 - JohnYang819
2 周前
勤奋的饭卡  ·  c++二维矩阵序列化与反序列化 - CSDN文库
1 年前
千杯不醉的牙膏  ·  Comparison Operators in Visual Basic | Microsoft Learn
1 年前
活泼的登山鞋  ·  使用PHP的反射类来执行MySQL查询安全吗?-腾讯云开发者社区-腾讯云
1 年前
绅士的斑马  ·  html - Container-fluid padding is not working in css and navbar brand css not working - Stack Overfl
2 年前
开朗的大白菜  ·  日常踩坑:valueerror: the queryset value for an exact lookup must be limited to one result using slicing._valueerror: the queryset valu
2 年前
今天看啥   ·   Py中国   ·   codingpro   ·   小百科   ·   link之家   ·   卧龙AI搜索
删除内容请联系邮箱 2879853325@qq.com
Code - 代码工具平台
© 2024 ~ 沪ICP备11025650号