1

最近我發現,由於新的運行時權限模型,我的應用程序不允許我選擇圖像並將其上傳到Android 6.0 Marshmallow上的Amazon S3 。所以,我在我的活動(「添加圖片」按鈕收聽)添加以下代碼:Android 6.0和Amazon S3 SDK打開失敗:EACCES(權限被拒絕)

if(ContextCompat.checkSelfPermission(this, Manifest.permission.WRITE_EXTERNAL_STORAGE) 
      != PackageManager.PERMISSION_GRANTED) { 
    if(ActivityCompat.shouldShowRequestPermissionRationale(this, Manifest.permission.WRITE_EXTERNAL_STORAGE)) { 
     new AlertDialog.Builder(getActivity()) 
       .setTitle(R.string.permlab_media_request) 
       .setMessage(R.string.permdesc_media_request) 
       .setPositiveButton(R.string.ok, new DialogInterface.OnClickListener() { 
        @Override 
        public void onClick(DialogInterface dialog, int which) { 
         ActivityCompat.requestPermissions(this, new String[] { Manifest.permission.WRITE_EXTERNAL_STORAGE }, 0); 
        } 
       }) 
       .create() 
       .show(); 
    } else { 
     ActivityCompat.requestPermissions(this, PERMISSIONS_STORAGE, 0); 
    } 
} else { 
    openPicker(); 
} 

和本次活動實現了ActivityCompat.OnRequestPermissionsResultCallback

@Override 
public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) { 
    if(requestCode != 0) { 
     return; 
    } 
    if(grantResults.length > 0 && grantResults[0] == PackageManager.PERMISSION_GRANTED) { 
     openPicker(); 
    } 
} 

此代碼工作完美 - 權限對話框正在正確顯示,如果用戶允許應用程序訪問外部存儲,圖像選擇器將打開並在SD卡上顯示可用圖像。 然而,當我嘗試使用此代碼選擇的圖像上傳到Amazon S3:

final TransferObserver transferObserver = mTransferUtil.upload(AmazonUtility.Constants.BUCKET_NAME, fileKey, file); 

失敗,並在日誌中這樣的消息:

E/UploadTask: Unable to calculate MD5 hash: /storage/0E17-2F07/Pictures/device-2015-12-03-184153.png: open failed: EACCES (Permission denied) 

這些權限在清單中還宣稱:

<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" /> 

Amazon SDK限制訪問外部SD卡的任何想法? 在具有較低API的設備上(< 23),所有這些代碼均正常工作,文件成功上傳。另外我想注意的是在Android 6.0的模擬器上運行這個應用程序。

在此先感謝!

回答

0

是的,問題出在模擬器上。我找到了一個真正的Android 6設備並在其上啓動了應用程序 - 並且上面貼出的代碼運行良好,沒有任何錯誤。我真的不明白爲什麼API 23模擬器與工作室管理500Mb SD卡的行爲就像那樣。來自Google的希望傢伙將會改進他們的模擬器

相關問題