3

摇篮

implementation platform('software.amazon.awssdk:bom:2.17.119')
implementation 'software.amazon.awssdk:s3'

用于获取预签名 URL 的代码

public static URL getPresignedUrl(String bucketName, String keyName ) {
    PresignedGetObjectRequest presignedGetObjectRequest = null;
    try {
        AwsCredentialsProvider credentialsProvider = StaticCredentialsProvider.create
                (AwsBasicCredentials.create(Access Key, Secret Key));


        S3Presigner preSigner = S3Presigner.builder()
                .credentialsProvider(credentialsProvider)
                .region(Region.US_WEST_2).build();
        GetObjectRequest getObjectRequest =
                GetObjectRequest.builder()
                        .bucket(bucketName)
                        .key(keyName)
                        .build();

        GetObjectPresignRequest getObjectPresignRequest = null;
        if (android.os.Build.VERSION.SDK_INT >= android.os.Build.VERSION_CODES.O) {
            getObjectPresignRequest = GetObjectPresignRequest.builder()
                    .signatureDuration(Duration.ofDays(1))
                    .getObjectRequest(getObjectRequest)
                    .build();
        }

        // Generate the presigned request
         presignedGetObjectRequest =
                 preSigner.presignGetObject(getObjectPresignRequest);
    } catch (Exception e) {
        e.getStackTrace();
    }
    return  presignedGetObjectRequest.url();
}

如果 Fire OS 版本大于或等于 7.xx,则应用程序运行良好 在 Fire OS 版本 5.xx 上崩溃

在线崩溃 S3Presigner preSigner = S3Presigner.builder()

崩溃日志

需要帮忙

4

1 回答 1

-1

如果没有对版本的确切了解,很难直接找出原因。

但是您可以通过分隔连接的语句来自己尝试:
目前:

        S3Presigner preSigner = S3Presigner.builder()
                .credentialsProvider(credentialsProvider)
                .region(Region.US_WEST_2).build();

新的:

        S3Presigner preSigner = S3Presigner.builder();
        preSigner = preSigner.credentialsProvider(credentialsProvider);
        preSigner = preSigner.region(Region.US_WEST_2):
        preSigner = preSigner.build();

我对 Java 和 Fire OS API 都不坚定,所以我的代码很可能即使在从未使用过的 Fire OS 版本上也无法工作,您必须进行一些更改。
尽管如此,我认为您可以解开所有陈述​​以查看导致问题的部分。
知道这一点后,您可以查看 Fire OS 5 中是否可能缺少相应的功能,或者您是否必须更改参数。

于 2022-02-06T02:30:17.700 回答