2
我正在用Xamarin構建一個Android應用程序,並且需要允許用戶從他們的設備中選擇一個JPEG圖像並上傳它。該過程跨越幾個不同的類別,涉及了很多檢查,我會在這裏排除的,但是這是它的要點:試圖從SD卡讀取引發UnauthorizedAccessException
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);
}
}
我也有AndroidManifest設置必要的權限:
<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卡?
謝謝!
好像HTTP:// stackoverflow.com/questions/31746787/xamarin-android-system-unauthorizedaccessexception-access-to-the-path-is-de可以幫助你。 – Jas
謝謝 - 原來我的問題只是在ReadWrite模式下打開流而不是Read。 –