【问题标题】:Android 6.0 and Amazon S3 SDK open failed: EACCES (Permission denied)Android 6.0 和 Amazon S3 SDK 打开失败:EACCES(权限被拒绝)
【发布时间】:2015-12-07 07:44:04
【问题描述】:

最近我发现由于新的运行时权限模型,我的应用程序不允许我选择图像并将其上传到 Android 6.0 Marshmallow 上的 Amazon S3。所以,我在我的活动中添加了这段代码(“添加图像”按钮监听器):

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 (

提前致谢!

【问题讨论】:

    标签: android amazon-s3 permission-denied android-6.0-marshmallow


    【解决方案1】:

    是的,问题出在模拟器上。我找到了一个真正的 Android 6 设备并在其上启动了应用程序 - 上面发布的代码运行良好,没有任何错误。我真的不明白为什么带有工作室管理的 500Mb SD 卡的 API 23 模拟器会这样。希望谷歌的人能改进他们的模拟器

    【讨论】:

      猜你喜欢
      • 2016-01-06
      • 2021-12-23
      • 2021-07-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-01-12
      • 2016-06-14
      相关资源
      最近更新 更多