尝试从 SD 卡读取会抛出 UnauthorizedAccessException
Attempting to read from SD card throws UnauthorizedAccessException
我正在使用 Xamarin 构建一个 Android 应用程序,需要允许用户从他们的设备 select JPEG 图像并上传它。该过程跨越几个不同的 类 并涉及很多检查,我将在此处排除这些检查,但这是它的要点:
private void ChooseImage()
{
// Open the image picker
Intent intent = new Intent(Intent.ActionGetContent);
intent.SetType("image/jpg");
_activity.StartActivityForResult(intent, (int)ImageRequest.ChooseImage);
}
protected override void OnActivityResult(int requestCode, Result resultCode, Intent data)
{
base.OnActivityResult(requestCode, resultCode, data);
string path;
Android.Net.Uri selectedImage = data.Data;
string[] filePathColumn = { MediaStore.MediaColumns.Data, MediaStore.MediaColumns.DisplayName };
using (ICursor cursor = ContentResolver.Query(selectedImage, filePathColumn, null, null, null))
{
// Get the path to the selected file
path = cursor.GetString(columnIndex);
}
using (FileStream fs = File.Open(path, FileMode.Open))
{
byte[] bytes = new byte[fs.Length];
// This throws an UnauthorizedAccessException
fs.Read(bytes, 0, Convert.ToInt32(fs.Length));
UploadImage(bytes);
}
}
我也在Android清单中设置了必要的权限:
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
如果用户选择 SD 卡上的图像而不是本地存储,此代码会导致抛出以下异常:
System.UnauthorizedAccessException: Access to the path "/storage/sdcard1/[user selected image].jpg" is denied.
所以...
为什么我没有权限读取SD卡?
谢谢!
问题是由这一行引起的:
using (FileStream fs = File.Open(path, FileMode.Open))
我应该添加第三个参数来指定读取模式而不是默认的 Read/Write:
using (FileStream fs = File.Open(path, FileMode.Open, FileAccess.Read))
我正在使用 Xamarin 构建一个 Android 应用程序,需要允许用户从他们的设备 select JPEG 图像并上传它。该过程跨越几个不同的 类 并涉及很多检查,我将在此处排除这些检查,但这是它的要点:
private void ChooseImage()
{
// Open the image picker
Intent intent = new Intent(Intent.ActionGetContent);
intent.SetType("image/jpg");
_activity.StartActivityForResult(intent, (int)ImageRequest.ChooseImage);
}
protected override void OnActivityResult(int requestCode, Result resultCode, Intent data)
{
base.OnActivityResult(requestCode, resultCode, data);
string path;
Android.Net.Uri selectedImage = data.Data;
string[] filePathColumn = { MediaStore.MediaColumns.Data, MediaStore.MediaColumns.DisplayName };
using (ICursor cursor = ContentResolver.Query(selectedImage, filePathColumn, null, null, null))
{
// Get the path to the selected file
path = cursor.GetString(columnIndex);
}
using (FileStream fs = File.Open(path, FileMode.Open))
{
byte[] bytes = new byte[fs.Length];
// This throws an UnauthorizedAccessException
fs.Read(bytes, 0, Convert.ToInt32(fs.Length));
UploadImage(bytes);
}
}
我也在Android清单中设置了必要的权限:
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
如果用户选择 SD 卡上的图像而不是本地存储,此代码会导致抛出以下异常:
System.UnauthorizedAccessException: Access to the path "/storage/sdcard1/[user selected image].jpg" is denied.
所以... 为什么我没有权限读取SD卡?
谢谢!
问题是由这一行引起的:
using (FileStream fs = File.Open(path, FileMode.Open))
我应该添加第三个参数来指定读取模式而不是默认的 Read/Write:
using (FileStream fs = File.Open(path, FileMode.Open, FileAccess.Read))