我正在制作一个新的跨平台MAUI应用程序,我试图简单地创建一个json file.the源代码,如下所示:
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添加以下代码:
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
其次,检查目标android版本是Android还是above.If答案是正确的,然后调用RequestPermissions方法:
#if ANDROID
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);
}
}
}
#endif
但是,我发现Android命名空间中没有这样的方法。
CS0103名称"RequestPermissions“在当前上下文中不存在。
我猜它只存在于platform.Or中,它确实存在于另一个namespace.And中,这意味着我无法获得所需的读和写权限。
需要一个全新的许可问题解决方案。
**注:**我的英语是poor.And我有一点编程experience.Please原谅我。
提前谢谢。
发布于 2022-08-04 02:50:03
实际上,如果您只是在System.Environment.GetFolderPath(System.Environment.SpecialFolder.Personal)
路径中操作文件,那么它不需要任何存储权限。因为这是应用程序自己的私人文件夹。我在一个新项目中测试了您的代码,成功地创建了josn文件。
此外,如果要请求maui中的权限,则需要在maui中使用api。您可以使用以下代码代替您的代码。
PermissionStatus statusread = await Permissions.RequestAsync<Permissions.StorageRead>();
PermissionStatus statuswrite = await Permissions.RequestAsync<Permissions.StorageWrite>();
最后,您也可以使用Mahesh提到的权限,但是如果需要的话,应该使用它。如果仍然需要,可以尝试在MainActivity中添加以下代码,以授予用户权限。
protected override void OnCreate(Bundle savedInstanceState)
{
if (!Android.OS.Environment.IsExternalStorageManager)
{
Intent intent = new Intent();
intent.SetAction(Android.Provider.Settings.ActionManageAppAllFilesAccessPermission);
Android.Net.Uri uri = Android.Net.Uri.FromParts("package", this.PackageName, null);
intent.SetData(uri);
StartActivity(intent);
}
base.OnCreate(savedInstanceState);
}
发布于 2022-08-03 12:10:53
使用这个权限,希望它有帮助,手动检查一次。
<uses-permission android:name="android.permission.MANAGE_EXTERNAL_STORAGE" />
https://stackoverflow.com/questions/73221292
复制相似问题