访问路径...被拒绝 - Xamarin Android
Access to the path ... is denied - Xamarin Android
我正在尝试将图像写入我的 android 文件系统,但是在尝试写入字节时,出现上述错误。
我是 运行 Visual Studio 2019 年(作为管理员)并且目标 API 级别 29
AndroidManifest.xml
我的清单文件中有我的外部存储权限:
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
根据另一个建议,我在我的应用程序标签中添加了 android:requestLegacyExternalStorage="true"
:
<application android:label="App Name" android:icon="@mipmap/launcher_foreground" android:extractNativeLibs="true" android:requestLegacyExternalStorage="true">
MainActivity.cs
这里我在应用程序启动时请求权限,并在两个提示上都按允许:
int requestPermissions = 0;
string cameraPermission = Android.Manifest.Permission.Camera;
string filePermission = Android.Manifest.Permission.WriteExternalStorage;
if (!(ContextCompat.CheckSelfPermission(this, cameraPermission) == (int)Permission.Granted) || !(ContextCompat.CheckSelfPermission(this, filePermission) == (int)Permission.Granted))
{
ActivityCompat.RequestPermissions(this, new String[] { cameraPermission, filePermission
}, requestPermissions);
}
SaveMedia.cs
我在 File.WriteAllBytes
上收到错误:
public string SavePickedPhoto(Stream file, string fileName)
{
var bytes = GetBytesFromStream(file);
string path = Path.Combine(Android.App.Application.Context.GetExternalFilesDir("").AbsolutePath + "PhotoDirectoryForApp";
if (!Directory.Exists(path))
{
try
{
Directory.CreateDirectory(path);
}
catch (Exception e)
{
}
}
Path.Combine(path, fileName);
try
{
File.WriteAllBytes(path, bytes);
}
catch (Exception ex)
{
}
return path;
}
我对接下来要尝试的事情有点不知所措,似乎我应该拥有将文件写入设备上的文件夹的必要权限。我也试过不同的保存位置和保存方法,结果都是一样的。
提前致谢
您正在尝试写入 目录 ,因为您正在丢弃 Path.Combine
中的 return 值:
Path.Combine(path, fileName);
尝试:
~~~
path = Path.Combine(path, fileName);
~~~
我正在尝试将图像写入我的 android 文件系统,但是在尝试写入字节时,出现上述错误。
我是 运行 Visual Studio 2019 年(作为管理员)并且目标 API 级别 29
AndroidManifest.xml
我的清单文件中有我的外部存储权限:
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
根据另一个建议,我在我的应用程序标签中添加了 android:requestLegacyExternalStorage="true"
:
<application android:label="App Name" android:icon="@mipmap/launcher_foreground" android:extractNativeLibs="true" android:requestLegacyExternalStorage="true">
MainActivity.cs
这里我在应用程序启动时请求权限,并在两个提示上都按允许:
int requestPermissions = 0;
string cameraPermission = Android.Manifest.Permission.Camera;
string filePermission = Android.Manifest.Permission.WriteExternalStorage;
if (!(ContextCompat.CheckSelfPermission(this, cameraPermission) == (int)Permission.Granted) || !(ContextCompat.CheckSelfPermission(this, filePermission) == (int)Permission.Granted))
{
ActivityCompat.RequestPermissions(this, new String[] { cameraPermission, filePermission
}, requestPermissions);
}
SaveMedia.cs
我在 File.WriteAllBytes
上收到错误:
public string SavePickedPhoto(Stream file, string fileName)
{
var bytes = GetBytesFromStream(file);
string path = Path.Combine(Android.App.Application.Context.GetExternalFilesDir("").AbsolutePath + "PhotoDirectoryForApp";
if (!Directory.Exists(path))
{
try
{
Directory.CreateDirectory(path);
}
catch (Exception e)
{
}
}
Path.Combine(path, fileName);
try
{
File.WriteAllBytes(path, bytes);
}
catch (Exception ex)
{
}
return path;
}
我对接下来要尝试的事情有点不知所措,似乎我应该拥有将文件写入设备上的文件夹的必要权限。我也试过不同的保存位置和保存方法,结果都是一样的。
提前致谢
您正在尝试写入 目录 ,因为您正在丢弃 Path.Combine
中的 return 值:
Path.Combine(path, fileName);
尝试:
~~~
path = Path.Combine(path, fileName);
~~~