2015-10-05 54 views
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卡?

謝謝!

+0

好像HTTP:// stackoverflow.com/questions/31746787/xamarin-android-system-unauthorizedaccessexception-access-to-the-path-is-de可以幫助你。 – Jas

+0

謝謝 - 原來我的問題只是在ReadWrite模式下打開流而不是Read。 –

回答

3

問題是由這一行造成的:

using (FileStream fs = File.Open(path, FileMode.Open)) 

我應該補充的第三個參數指定閱讀模式,而不是默認的讀/寫:

using (FileStream fs = File.Open(path, FileMode.Open, FileAccess.Read))